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 :

Incrémenter une variable de type string


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 Incrémenter une variable de type string
    Bonjour,

    J'ai une variable de type string initialisée à "A000001" et je voudrais lorsque je clique sur un bouton, la variable s'incrémente à "A000002" et si par exemple la valeur est égale "A000009", ça doit me proposer "A000010" et cela jusqu'à "A999999".

    Merci,

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Dans mon exemple je vais supposer que le préfixe est toujours la lettre A, et que la longueur du string au final sera toujours de 7 caractères (préfixe inclus).

    Donc déjà on isole les chiffres :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var initialValue = "A000001";
    var prefix = initialValue.Substring(0, 1);
    var valueWithoutPrefix = initialValue.Substring(1, initialValue.Length - 1);
    var finalValue = string.Empty;
    Ensuite, on va convertir les chiffres isolés dans valueWithoutPrefix en Int, puis faire l'incrément :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var convertedValue = -1;
    if (int.TryParse(valueWithoutPrefix, out convertedValue))
    {
        ++convertedValue;
    }
    Enfin, on utilise le spécificateur de format "D6" afin de se retrouve avec un décimal à 6 chiffres, que l'on cast en string, et on appose le préfixe :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    finalValue = prefix + convertedValue.ToString("D6");

  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
    ça ne fonctionne pas.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    ça ne fonctionne pas.
    C'est le genre de phrase qui a le don d'énerver, en plus de ne vouloir rien dire. Qu'est-ce qui ne fonctionne pas ?

  5. #5
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Une autre option, si tu veux pouvoir gérer n'importe quelle chaine qui finit par un nombre, est d'utiliser une regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private static string Increment(string s)
    {
    	var regex = new Regex(@"^(?<prefix>.*?)(?<value>\d+)$");
    	var match = regex.Match(s);
    	if (!match.Success)
    		throw new FormatException();
    	string prefix = match.Groups["prefix"].Value;
    	string sValue = match.Groups["value"].Value;
    	int value = int.Parse(sValue);
    	value++;
    	return prefix + value.ToString().PadLeft(sValue.Length, '0');
    }

  6. #6
    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
    Je m'excuse M. DotNetMatt.

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Pas de soucis Jinkas, mais tu n'as toujours pas expliqué ce qui ne fonctionnait pas

    Essaie avec la méthode de tomlev aussi, elle est plus souple que la mienne.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour,
    un truc comme ça, pourrait il convenir ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            int i = 1;
            private void button1_Click(object sender, EventArgs e)
            {
               textBox1.Text= "A"+i.ToString("0000#");
               i++;
            }

  9. #9
    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é M. DotNetMatt j'a réessayé votre méthode et ça fonctionne ainsi que celle de M. Tomlev.

    Merci à tous.

    Cependant, comment pourrais-je le faire une boucle for?

    Merci,

  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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Cependant, comment pourrais-je le faire une boucle for?
    Bah si c'est ça que tu cherchais à faire, pourquoi ne pas l'avoir dit dès le début ? C'est beaucoup plus simple que d'incrémenter la valeur déjà formatée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i = 1; i <= MAX; i++)
    {
        string s = i.ToString("A{0:D6}"); // A000001, A000002, etc...
        ...
    }

  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
    Une dernière chose si possible.

    J'ai 2 RadioButton et un TextBox. Lorsque je clique sur

    radiobutton2_CheckedChanged, le TextBox prend le Max + 1 de "A000001" par exemple. Et lorsque je clique sur radiobutton1_CheckedChanged, le TextBox s'initialise à vide (TextBox.Text = "").

    Mon problème est que lorsque je passe de radiobutton2 à radiobutton1 j'ai tout de suite le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show("Le TextBox ne doit pas commencer par la lettre A");
    alors que je voudrais qu'il s'affiche au moment où j'écris la lettre A.

    que j'ai le MessageBox.

    Le code du TextBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void TextBox_TextChanged(object sender, EventArgs e)
            {
                string input = TextBox.Text;
         
                if (radiobutton1.Checked)
                {
                    if ((input != "") && (input.Substring(0, 1) == "A"))
                    {
                        MessageBox.Show("Le TextBox ne doit pas commencer par la lettre A");
                    }
                }
            }
    et dans radiobutton1_CheckedChanged, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void radiobutton1_CheckedChanged(object sender, EventArgs e)
            {
    TextBox.Text = "";
            }

  12. #12
    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
    Je pense que ça marche.

    J'ai du faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void radiobutton1_CheckedChanged(object sender, EventArgs e)
    {
        if (radiobutton1.Checked)
       {
        }
        else
      {
         TextBox.Text = "";
      }
    }
    Merci à tous,

  13. #13
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    N'oublie pas alors le tag

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

Discussions similaires

  1. problème avec une variable de type string
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2007, 14h53
  2. Réponses: 6
    Dernier message: 14/02/2007, 21h08
  3. Des " dans une variable de type String
    Par 4lkaline dans le forum Langage
    Réponses: 6
    Dernier message: 06/11/2006, 14h20
  4. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 08h28
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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