[débutant] IndexOf() ne fonctionne pas dans mon cas [Résolu]

Signaler
Messages postés
192
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
19 octobre 2020
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour,

Je souhaite lire un fichier texte, le charger dans un Arraylist afin de pouvor le traiter ( modification, insertion).

J'utilise un ArrayList afin d'avoir un tableau de string dynamique.

J'ai un seul petit soucis, petit, mais très génant.

Le IndexOf ne fonctionne pas !

En gros, je prend chaque ligne avec Readline, je les met une par une dans un élément de mon ArrayList.

Ensuite, je fais un :


m_StreamRead = new StreamReader(@"c:\toto.txt");

while (m_StreamRead.Peek() > 0)
{
    strCurrentLigne.Add(m_StreamRead.ReadLine());
}

int nPosition;
String myString = "[meschamps]";

nPosition = strCurrentLigne.IndexOf(myString);



Le soucis est nPosition me renvoie -1 au lieu de la position de l'occurence [meschamps].

J'ai regardé en debug, mon Arraylist est pourtant bien alimenté ligne par ligne.

Je ne comprend vraiment pas.

Merci bcp :)

Nixeus'

5 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
Salut

Es-tu sûr que dans ton fichier texte, il y a bien une ligne égale à "[meschamps]" ? (pas une partie, mais une ligne entière)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
192
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
19 octobre 2020

Haha,

Merci krimog,

Enfait, il y a un espace devant le [champ], je n'y avais pas fais attention et à vrai dire je pensais que IndexOF recherchais une partie et non uniquement l'occurence.

Existe-il une méthode pour rechercher une occurence dans une ligne ? Car j'en aurais besoin par la suite.Merci

Nixeus'
Messages postés
192
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
19 octobre 2020

Suis-je bête.

J'oubliais le .ToString().Contains(string xxx)

Nixeus'
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
Il y a même moyen de ne pas faire de boucle pour faire le "Contains()" via une expression Lambda, en utilisant cependant une List<string> à la place de ton ArrayList :

List<string> maListe = new List<string>();
while (m_StreamRead.Peek() > 0)
{
    maListe.Add(m_StreamRead.ReadLine());
}

string myString = "[meschamps]";int nPosition maListe.FindIndex(s> s.Contains(myString));

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
La boucle est bien entendue implicite !
En passant, même si une lambda expression est plus "jolie" à voir, elle est en principe moins rapide...

<hr />
-Blog-
-Site Perso-