IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Convertir un chiffre en mois


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut Convertir un chiffre en mois
    Bonjour,

    Je voudrais convertir un chiffre en mois (ex : 2 --> février). Pour celà,
    j'ai crée un fonction que j'ai appelée ConvertirEnMois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public static string ConvertirEnMois(int Nombre)
            {
                switch (Number)
                {
                    case 1:
                    return "Janvier";
     
                    case 2:
                    return "Février";
     
                    case 3:
                    return "Mars";
     
                    case 4:
                    return "Avril";
     
                    case 5:
                    return "Mai";
     
                    case 6:
                    return "Juin";
     
                    case 7:
                    return "Juillet";
     
                    case 8:
                    return "Août";
     
                    case 9:
                    return "Septembre";
     
                    case 10:
                    return "Octobre";
     
                    case 11:
                    return "Novembre";
     
                    case 12:
                    return "Décembre";
     
                    default:
                    return "Mois inconnu";
                }
            }
    Dans mon code, je fais un select dans lequel je voudrais récupérer un champs de type entier de longueur 6 chiffres (ex: 200802) et extraire les
    2 derniers chiffres qui correspondent au mois.

    Donc, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "select champs1, champs2, champs3, " + ConvertirEnMois(champs4)
    Ce que je n'arrive pas à faire c'est utiliser le substr dans mon code c# pour extraire les 2 derniers chiffres de la valeur du champs4 alors que j'ai testé ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select substr(200802,5) from dual
    dans l'outil sql que j'utilise et ça fonctionne très bien.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Ce que je n'arrive pas à faire c'est utiliser le substr dans mon code c# pour extraire les 2 derniers chiffres de la valeur du champs4
    Bonjour,

    1. Tu peux mettre la ligne de code qui correspond à ce que tu récupères du champ 4 ?

    2. Tu as essayé en mode debug pour voir la valeur que tu récupères ? Tu as quoi précisément ?

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    J'ai essayé celà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT CHAMPS1, CHAMPS2, CHAMPS3, " + ConvertirEnMois(+ " substr(champs4,5) " ) +
    mais aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT CHAMPS1, CHAMPS2, CHAMPS3, " + ConvertirEnMois(+ " cast(substr(champs4,5)) as int " ) +
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT CHAMPS1, CHAMPS2, CHAMPS3, " + ConvertirEnMois(2) +
    Aucun fonctionne!

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Déjà, pour ta conversion, pourquoi faire simple quand on peut faire compliqué ?

    Quand même moins tarabiscoté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            static string monthFromNumber(int iMonth)
            {
                return DateTime.ParseExact(iMonth.ToString("00"), "MM", CultureInfo.CurrentCulture).ToString("MMMM");
            }
    Ensuite, je ne comprends pas ce que tu essaye de faire : à moins d'utiliser du SQL CLR (Sql Server uniquement), tu ne peux évidemment pas appeler une fonction .Net depuis le SQL.

    Par ailleurs, c'est étrange de demander à SQL d'effectuer une transformation comestique de données, ce n'est pas son job. Pourquoi ne transforme tu pas cela au moment de l'affichage ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    comment l'utiliser dans la requête car j'essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    = " select champs1, champs2, champs3, " + monthFromNumber(+ " champs4 " + ) +
    ça ne fonctionne pas

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    comment l'utiliser dans la requête car j'essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    = " select champs1, champs2, champs3, " + monthFromNumber(+ " champs4 " + ) +
    ça ne fonctionne pas
    Tu lis les réponses qu'on te fait ?????

    à moins d'utiliser du SQL CLR (Sql Server uniquement), tu ne peux évidemment pas appeler une fonction .Net depuis le SQL.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Désolé de ne pas avoir suivi correctement la discussion. Effectivement, il est plus logique de faire la conversion au moment de l'utilisation de la variable comme par exemple pour remplir un datagridview à l'aide d'une liste dans le reader comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maliste.champs4 = mafonction(Convert.ToInt32(reader[4]));
    Cependant, j'ai l'erreur suivante:
    il est impossible de convertir implicitement le type 'string' en 'int'
    Merci,

  8. #8
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Bonjour!
    Essaie plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maliste.champs4 = mafonction(int.Parse(reader[4]))

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Bonjour!
    Essaie plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maliste.champs4 = mafonction(int.Parse(reader[4]))
    Là tu infère qu'il procéde via un DataReader, mais comme il n'a pas daigné nous dire comment il exploitait sa requête SQL, on n'en sait rien.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Là tu infère qu'il procéde via un DataReader, mais comme il n'a pas daigné nous dire comment il exploitait sa requête SQL, on n'en sait rien.
    Oui il vrai que c'est une proposition sans appui!
    Un peu plus de code de sa part permettrait une proposition plus fiable

  11. #11
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while (reader.Read())
    {
    MaClasse c = new MaClasse (); // contenant mes objets
    c.champs1= Convert.ToInt32(reader[0]);
    c.champs2= reader[1].ToString();
    c.champs3= reader[2].ToString();
    c.champs4= monthFromNumber(int.Parse(reader[3])); // Erreur ici
    maListe.Add(c);
    }
    Erreur 2 Argument 1*: impossible de convertir de 'object' en 'string'
    Erreur 1 La méthode surchargée correspondant le mieux à 'int.Parse(string)' possède des arguments non valides

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c.champs4= monthFromNumber(int.Parse(reader[3].ToString()));
    Ou mieux, modifier la méthode de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
            static string monthFromNumber(string month2Digits)
            {
                if (string.IsNullOrEmpty(month2Digits))
                {
                    throw new ArgumentNullException("month2Digits");
                }
                int iMonth = 0;
                bool parseOk = int.TryParse(month2Digits, out iMonth);
                if ((parseOk == false) || (iMonth < 1) || (iMonth > 12))
                {
                    throw new ArgumentException(month2Digits + " n'est pas un mois valide (01 à 12)", "month2Digits");
                }
                return DateTime
                        .ParseExact(iMonth.ToString("00"), "MM", CultureInfo.CurrentCulture)
                        .ToString("MMMM");
            }
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c.champs4= monthFromNumber(reader[3].ToString());
    Ainsi, tu supportes éventuellement le codage du mois sans le "0" initial.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  13. #13
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    As tu essayé de Parser dans monthFromNumber(string)??

  14. #14
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Le problème est que mon champs4 est déclaré en tant qu'entier dans MaClasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int champs4 { get; set; }
    car dans la base de données il est type entier aussi.

  15. #15
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Le problème est que mon champs4 est déclaré en tant qu'entier dans MaClasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int champs4 { get; set; }
    car dans la base de données il est type entier aussi.
    Essaye d'être plus précis car, là, ça devient n'importe quoi !!!!

    Tu dis que tu veux le mois en chaine puis tu dis qu'il est déclaré en entier.

    Bref, essaye d'être cohérent !!!!

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  16. #16
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Effectivement je dis n'importe quoi. J'aurai du déclarer champs4 en tant que string dans MaClasse et normalement la fonction monthFromNumber devrait fonctionner.

  17. #17
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Oui ce n'est pas très clair
    Si le soucis est d'avoir un entier pourquoi ne pas convertir celui-ci avant l'appel de monthFromNumber();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int value = int.parse(reader[4].ToString());
    Verifie la valeur puis utilise la pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monthFromNumber(value);

  18. #18
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Merci ça fonctionne correctement. Vous saurez comment afficher le mois en Majuscule?

  19. #19
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Merci ça fonctionne correctement. Vous saurez comment afficher le mois en Majuscule?
    Ajouter ".ToUpper()" à la fin de la chaine.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  20. #20
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    string.ToUpper();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Vxi] Convertir un mois en chiffre à un mois en lettres
    Par Burt67 dans le forum Webi
    Réponses: 3
    Dernier message: 04/06/2010, 08h34
  2. Convertir un chiffre de 0 à 1 en string
    Par dodineau dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/02/2007, 08h26
  3. [WD10] Code pour convertir les chiffres en lettres
    Par w-cobra dans le forum WinDev
    Réponses: 10
    Dernier message: 24/01/2007, 16h56
  4. Convertir un chiffre avec virgul en nombe entier
    Par delavega dans le forum ASP
    Réponses: 1
    Dernier message: 03/10/2006, 11h32
  5. possible convertir un chiffre en lettre avec builder ?
    Par devlopassion dans le forum C++Builder
    Réponses: 8
    Dernier message: 11/09/2006, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo