Chaine de caracteres - que des chiffres ? que des lettres ?

Résolu
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 - 18 mars 2007 à 10:31
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 18 mars 2007 à 18:02
Bonjour,
encore une petite question :pp

comment peut - on vérifier en C# qu'une chaine de caractéres ne contient que des lettres
en VB.NET il existe la méthode IsNumeric() apparemment il n'existe pas d'equivalent en C#
comment faites - vous ?

sinon il y a la possibilité de se créer une méthode générique qui recoit une chaine de caracteres et qui boucle sur chaque caractere pour verifier, et qui renverrait par exemple un boolean si un des caracteres n'est pas une lettre
mais bon je ne vais pas reinventer quelque chose si une autre maniere plus adaptée existe deja mais que je ne connaitrais pas

sinon de la meme maniere existe t'il une methode pour verifier qu'un varaibale toujours de type string ne contient que des chiffres ?

mercii
++

8 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 mars 2007 à 10:40
Salut, 

Pour verifier qu'une chaine ne contient que des lettres ou des chiffres, il y a (entre autres) les expressions regulieres.
Pour remplacer IsNumeric, tu peux aussi simplement utiliser les méthodes int.TryParse(), float.TryParse(), etc.

Enfin bref, tu as le choix ;)

Mx
MVP C# 
3
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
18 mars 2007 à 10:57
a oui c'est vrai j'avaias pas pensé aux expressions régulières

sinon je ne suis pas trop adepte de tryparse mais en effet il a l'air de faire le travail
merci pour ses renseignements
++
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 mars 2007 à 11:49
Sans avoir benché, je pense que le TryParse est plus rapide qu'une expression régulière...
A voir.

<hr />
-Blog-
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 mars 2007 à 12:01
Ca me fait penser que 'avait eu discussion la dessushttp://www.csharpfr.com/code.aspx?ID=35028

Mx
MVP C# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 mars 2007 à 12:17
C'est pas facile de bencher, car si on prend un certain nombre d'entier à tester, il faut mettre un pourcentage de non-entier.
Et certainement que selon ce pourcentage, on a des résultats qui peuvent être assez différent....

Je vais essayer de faire un petit teste tient, ça pourrait être intéressant.

<hr />
-Blog-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 mars 2007 à 12:30
J'ai généré un tableau de 10'000 éléments (des strings).
J'ai mis un certain pourcentage de string qui n'était pas des nombres (les entiers étaient générés aléatoirement)
L'expression régulière était compilée au préalable.

Résultat:
10% de non entier    TryParse environ 15x plus rapide
20% de non entier    TryParse environ 25x plus rapide
30% de non entier    TryParse environ 40x plus rapide
50% de non entier    TryParse environ 60x plus rapide

<hr />
-Blog-
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
18 mars 2007 à 13:34
a oui j'ai vu MorpionMx la source sur csharpfr

personnellement je viens de me faire deux petites fonctions qui sont ce qu'elles sont mais je les poste quand meme elles peuvent toujours servir 

// string




        ///<summary>




       
///
vérifie que la chaine ne contient que des lettres




       
///
</summary>




        ///






        ///<returns></returns>




        publicbool isLetter(string sReceive)




        {




            bool bResult;




            char[] cWork;




            System.Collections.IEnumerator EnumeratorcWork;



 



            bResult = true;




            cWork = sReceive.ToCharArray();




            EnumeratorcWork = cWork.GetEnumerator();



 



            while (EnumeratorcWork.MoveNext()==true)




            {




                if (Char.IsLetter((Char)EnumeratorcWork.Current) == false)




               
{




                    bResult = false;




                }




            }




       




            return bResult;




        }




        ///<summary>




        /// vérifie que la chaine ne contient que des chiffres




       
///
</summary>




        ///






        ///<returns></returns>




        publicbool isDigit(string sReceive)




        {




            bool bResult;




            char[] cWork;




            System.Collections.IEnumerator EnumeratorcWork;



 



            bResult = true;




            cWork = sReceive.ToCharArray();




            EnumeratorcWork = cWork.GetEnumerator();



 



            while (EnumeratorcWork.MoveNext() == true)




            {




                if (Char.IsDigit((Char)EnumeratorcWork.Current) == false)




               
{




                    bResult = false;




                }




            }



 



            return bResult;




        }




 
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 mars 2007 à 18:02
Pourquoi faire "si compliqué"?
foreach(char c in myString)
{
}

Va très bien aussi

<hr />
-Blog-
0
Rejoignez-nous