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 :

Convertion Convert.ToInt32("01") en 01 et non 1


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut Convertion Convert.ToInt32("01") en 01 et non 1
    Bonjour,

    Je souhaiterai faire quelque chose d'assez simple.

    Voilà j'ai une chaîne de caractère de ce type : "01-05" qui correspond au valeur 01 à 05 soit "01,02,03,04,05".

    Je souhaiterai convertir "01-05" en "01,02,03,04,05".

    J'ai donc procédé de cette manière :

    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
     string strValeurDepart = "01-05";
    string strValeurFinale = "";
    if (strValeurDepart.Contains("-"))
        {
            int v_iMin = Convert.ToInt32(strValeurDepart.Substring(0, strValeurDepart.IndexOf("-")));
            int v_iMax = Convert.ToInt32(strValeurDepart.Substring(strValeurDepart.IndexOf("-") + 1));
     
            for (int i = v_iMin; i <= v_iMax; i++)
            {
                if (strValeurFinale == "")
                {
                    strValeurFinale = i.ToString();
                }
                else
                {
                    strValeurFinale += "," + i.ToString();
                }
            }
     
        }
    Le problème est qu'au lieu d'avoir "01,02,03,04,05" j'ai "1,2,3,4,5". Or pour mon application les 0 sont importants.

    Aurait-il quelqu'un pour m'aider.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    il va peut-être te falloir concaténer ton zero, lorsque que tu convertis en int32 pour ta boucle, tes chiffres sont 1 et 5.
    pour rajouter ton 0 il te faudrait (ce n'est qu'une suggestion)

    faire quelque chose qui ressemble à ça

    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
     
     
    string strValeurDepart = "01-05";
    string strValeurFinale = "";
    if (strValeurDepart.Contains("-"))
        {
            int v_iMin = Convert.ToInt32(strValeurDepart.Substring(0, strValeurDepart.IndexOf("-")));
            int v_iMax = Convert.ToInt32(strValeurDepart.Substring(strValeurDepart.IndexOf("-") + 1));
     
            for (int i = v_iMin; i <= v_iMax; i++)
            {
                if (strValeurFinale == "")
                {
                    strValeurFinale = "0" + i.ToString();
                }
                else
                {
                    strValeurFinale += ",0" + i.ToString();
                }
            }
     
        }
    Après j'ai peut-être mal compris ou je connais pas forcément la solution la meilleure, mais je pense que ça devrais te donner ce que tu cherches

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Par défaut
    Bonjour,

    monNombre.ToString("00") force l'affichage à deux caractères

  4. #4
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Merci de cette petite aide
    donc, oublie ce que j'ai marqué et sers toi de cette astuce de Felloweis

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Merci beaucoup pour votre aide.

    Cependant je souhaiterai savoir comme faire si je suis dans ce cas "08-103".

    Sachant que "01" doit rester "01" et "103" doit être sur 3 caractères.

    Merci d'avance.

  6. #6
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    Citation Envoyé par killysui Voir le message
    Merci beaucoup pour votre aide.
    Cependant je souhaiterai savoir comme faire si je suis dans ce cas "08-103".
    Sachant que "01" doit rester "01" et "103" doit être sur 3 caractères.
    Merci d'avance.
    Dans ce cas, tu insères un petit "if" (en jouant sur le nombre de caractères après le - ) avant de récupérer la valeur v_iMax

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    J'aurai plutôt utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] strings = monString.Split("-");
    //strings[0] Représente la valeur minimale
    //strings[1] Représente la valeur maximale
     
    strValeurFinale = i.ToString("#00");//(103) affiché 103 et (01) affiché 01

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par zehle Voir le message
    J'aurai plutôt utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] strings = monString.Split("-");
    //strings[0] Représente la valeur minimale
    //strings[1] Représente la valeur maximale
     
    strValeurFinale = i.ToString("#00");//(103) affiché 103 et (01) affiché 01
    +1
    le 0 indique un chiffre obligatoire (donc le résultat sera toujours au moins sur 2 chiffres), et le # indique un chiffre optionnel. Il faut d'ailleurs en ajouter quelques uns en plus si tu peux avoir des nombres plus grands

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Juste par curiosité, il n'y a pas moyen de faire quelque chose de plus générique, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strValeurFinale = i.ToString("(#)*00")
    qui fonctionnerait pour 0 à N chiffres supplémentaires ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    euh, en fait je crois que j'ai dit une connerie
    en fait ça sert à rien de mettre plusieurs #, 1 seul suffit
    et donc un format du style "(#)*00" ne sert à rien non plus

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Et du coup ça répond à ma question
    Merci !

    killysui, tu considères ton problème ?

  12. #12
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    J'ajoute juste que ce genre de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = "";
    foreach(machin in bidule)
      s += ...;
    est très coûteux en perf. Il vaut mieux utiliser un StringBuilder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StringBuilder builder = new StringBuilder();
    foreach(machin in bidule)
      builder.Append(",").Append(i.ToString("#00"));

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    en y réfléchissant un peu, je crois même que le # est inutile dans notre cas.
    il serait utile dans d'autre cas, mais mettre ToString("00"); devrait largement suffire

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Bonjour,

    Merci a tous pour vos réponses. Grace a vous j'ai donc pu créer ma fonction.

    je crois même que le # est inutile dans notre cas.
    il serait utile dans d'autre cas, mais mettre ToString("00"); devrait largement suffire
    Je confirme dans notre cas le # est inutile. Parcontre je ne comprend pas comment cela peux fonctionner. Peux être qui correspond au nombre minimum de caractère.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

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