Chaine de caracteres - que des chiffres ? que des lettres ? [Résolu]

Signaler
Messages postés
687
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
-
cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
43
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# 
Messages postés
687
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
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
++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
Sans avoir benché, je pense que le TryParse est plus rapide qu'une expression régulière...
A voir.

<hr />
-Blog-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
43
Ca me fait penser que 'avait eu discussion la dessushttp://www.csharpfr.com/code.aspx?ID=35028

Mx
MVP C# 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
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-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
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-
Messages postés
687
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
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;




        }




 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
44
Pourquoi faire "si compliqué"?
foreach(char c in myString)
{
}

Va très bien aussi

<hr />
-Blog-