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 :

Fonction qui retourne True si la chaine ne contient que des chiffres


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut Fonction qui retourne True si la chaine ne contient que des chiffres
    Bonjours tout le monde,

    je viens de commencer avec c# , j'ai besoin d'une méthode qui retourne True si la chaine d'entré ne contient pas des lettre.

    Mais ca ne fonctionne pas , je ne vois pas ou sa bloque

    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
    public Boolean SeulementChiffre(string chaine)
            {
                Boolean result = true;
                int i=0;            
                while(i<chaine.Length && result)
                {
                    if (chaine[i].Equals("1") | chaine[i].Equals("2") | chaine[i].Equals("3") | chaine[i].Equals("4") |
                        chaine[i].Equals("5") | chaine[i].Equals("6") | chaine[i].Equals("7") | chaine[i].Equals("8") |
                        chaine[i].Equals("9") | chaine[i].Equals("0") | chaine[i].Equals("") | chaine[i].Equals("+") |
                        chaine[i].Equals("-") | chaine[i].Equals("(") | chaine[i].Equals(")") | chaine[i].Equals(":") |
                        chaine[i].Equals("/") | chaine[i].Equals("."))
                     i++; 
                    else
                     result = false; 
                }
     
                return result;
            }
    Merci d'avance de votre aide

  2. #2
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Bonjour,

    C'est pas plutôt des || pour signifier le 'OR' ?

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le problème vient de
    chaine[i] est un caractère, hors tu le testes par rapport à une chaîne.

    Ceci marchera mieux
    Pour ce qui est des opérateurs OU, il ne faut pas confondre | qui représente le OU logique et || qui représente le OU conditionnel. Les 2 fonctionnent, mais le second est adapté pour les conditions, en n'évaluant l'expression qui si nécessaire.

    Sinon, pour avoir un code plus clair, passer par une expression régulière est aussi bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public bool ChaineValide(string chaine)
    {
        return Regex.IsMatch(chaine, @"^[\d\+\-\(\):/\.]*$");
    }
    Enfin, plus clair si on comprend les expressions régulières évidemment ^^

    Si tu préfères tout tester, tu peux au moins supprimer la boucle est passer par la méthode Contains de la classe String.

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci Jmichou972 et StormimOn de vos reponse,

    Votre reponse StormimOn m'a resolu le probleme et la methode fonctionne correctement

    Mais j'ai pa bien compris votre fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex.IsMatch(chaine, @"^[\d\+\-\(\):/\.]*$");

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Comme je l'ai dit, c'est une expression régulière. Après on connait ... ou pas. Et si on ne connait pas, et bien cherche sur ce sujet si cela t'intéresse

    Cela permet de faire de la recherche, du remplacement ou de la validation de chaîne de caractères par exemple. Pour résumer très vite évidemment ^^

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 218
    Points : 28 180
    Points
    28 180
    Par défaut
    Bien compliqué tout ça.

    Essaye simplement de convertir en nombre.

    Ex, si ta chaine est succeptible de représenter un Int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Boolean SeulementChiffre(string chaine)
            {
            int i = 0;
            return int.TryParse(chaine, out i); 
            }

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Bien compliqué sauf qu'il veut plus que des chiffres, contrairement à ce qu'indique le titre du sujet. Il veut les chiffres, des opérateurs ainsi que des parenthèses (cf. les tests effectués dans son code)

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci tout le monde Pour vos reponses,

    Effectivement , Je suis interessé par les chiffres, les parentheses, les operateurs....

  9. #9
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Les regex sont bien pratiques et parfois même nécessaires. Par contre, c'est souvent d'une lenteur affligeante pour le traitement de données volumineuses.

    C'est un comportement normal ou bien c'est moi qui ne sais pas les utiliser?

    PS: désolé pour le HS...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/09/2009, 18h19
  2. Réponses: 35
    Dernier message: 25/06/2008, 16h50
  3. Réponses: 9
    Dernier message: 08/08/2007, 11h35
  4. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  5. Réponses: 4
    Dernier message: 20/02/2006, 00h33

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