String contains()

Résolu
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 23 mai 2012 à 10:49
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 - 23 mai 2012 à 12:10
Salut tout le monde,

petite question,
j'ai un fichier texte avec une liste d'utilisateur sous cette forme :

Id : j.dupond
Prenom : Jean
Nom : Dupond

et pour récupérer les informations de l'utilisateur je fais comme ceci :

            string[] tab = File.ReadAllLines(path);
            long nb = CountLines(path); // compte le nombre de ligne du txt

            for (int i = 0; i < nb - 1; i++)
            {
                if (tab[i].ToLower().Contains(value.ToString().ToLower()))
                {
                    user = i.ToString();
                }
            }


le problème c'est que imaginons je recherche j.dupond, dans certain cas il me renvoi la ligne Nom : Dupond au lieu de la ligne Id: j.dupond, je voulais donc savoir si il n'y aurais pas un moyen de rendre Contains() plus précis, pour lui indiquer par exemple de ne récupérer la ligne contenant le mot exacte.
Voila j’espère avoir été explicite.

Je vous remercie d'avance.

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas été

4 réponses

theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
23 mai 2012 à 10:57
Idée de génie

Bon je pense qu'il doit y avoir mieux donc je suis toujours partant pour une répons mais sinon j'ai utilisé le titre de la ligne pour résoudre mon problème.
si ça peut servir :

            Form1 index = (Form1)this.Owner;
            Object value = index.value_cell();

            int col = index.value_col();
            int tare = 0;
            string path = @"D:\data.txt";
            string user = "";
            string seek = "";

            if (col == 0)
            {
                tare = 0;
                seek = "id : ";

            }
            else if (col == 1)
            {
                tare = 1;
                seek = "prenom : ";
            }
            else if (col == 2)
            {
                tare = 2;
                seek = "nom : ";
            }

            string[] tab = File.ReadAllLines(path);
            long nb = CountLines(path);

            for (int i = 0; i < nb - 1; i++)
            {
                if (tab[i].ToLower().Contains(seek + value.ToString().ToLower()))
                {
                    user = i.ToString();
                }
            }

            prenom.Text = tab[Convert.ToInt32(user) + 1 - tare].Substring(9);
            nom.Text = tab[Convert.ToInt32(user) + 2 - tare].Substring(6);
            id.Text = tab[Convert.ToInt32(user) - tare].Substring(5);


voila, ça a l'air de fonctionner.
Merci.

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
3
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
23 mai 2012 à 11:07
Bonjour,

Tu peux utiliser une regex pour trouver ca que tu cherches:

String line = tab[i].ToLower();
String search = value.ToString().ToLower();
if(Regex.IsMatch(line, @"\b" + search + "\b")){}

Je n'ai pas test mais ca devrait ressemble a quelque chose comme ça.

Sinon en utilisant Contains(), tu peux détourner le résultat en faisant:
if (tab[i].ToLower().Contains(" : " + value.ToString().ToLower())){}
Mais le fonctionnement n'est pas garanti sachant qu'il n'y a pas de caractère de fin de ligne et qu'il faut a chaque fois chercher la chaine exacte (ou du moins le début de chaîne exact).
3
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
23 mai 2012 à 11:19
Salut L0ci ,

merci de ta réponse , c'est vrai que les regex sont surment plus adaptées, mais je crois que je suis allergique , chaque fois que j'essaye c'est aspirine garantie.
Bonne journée

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
23 mai 2012 à 12:10
Salut theflayer,

Je suis pas un grand fan des regex non plus même si ça marche bien .
Pour ta solution le problème va apparaître si tu as un utilisateur qui s'appelle Martin et un autre Martine. Si tu cherches martin les 2 résultats correspondront a la recherche.

Une solution serait de transformer user en liste pour afficher tout les résultats retournés.
0
Rejoignez-nous