Repere dans un fichier texte

Résolu
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007 - 23 août 2007 à 17:47
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007 - 24 août 2007 à 16:36
Voila mon problème

J'ai un fichier texte, Nomfichier[0], je le parcours avec streamearder et stok les valeurs dans une arraylist. je veux repérer dans mon fichier le numero de la ligne contenant "# heure d'acquisition". Je n'arrive pas à savoir si c'est le bon code car quand j'essaie de convertir repere en string et l'afficher dans un label j'ai un message d'erreur...
voicii le code:

StreamReader

sr =
new
StreamReader(Nomfichier[0]);

String ligne;

ArrayList maListe =
new
ArrayList(); 

int taille;taille = 0;

while ((ligne = sr.ReadLine()) !=
null){

maListe.Add(ligne);

}

sr.Close();

int repere =maListe.IndexOf(
"# heure d'acquisition");label1.Text = repere.ToString;

 

13 réponses

cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 15:31
Ok
On va rajouter un niveau de détail pour essayer de comprendre ce qu'il se passe

Si ta liste contient la bonne valeur c'est quand on récupère la valeur d'un de ses objets qu'on doit mal s'y prendre.

Je crois avoir pigé pourquoi ca marchait pas essaie de mettre >=0 au lieu de >0 dans le test sur le IndexOf

je suis pratiquement sûr que ca vient de là (l'index recherché étant 0 puisque tu recherche la ligne toute entière, si on lui demande de faire quelque chose si c est strictement plus grand que 0 c est normal qu'il ne fasse rien)

tiens nous au courant

_Syl_
3
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
23 août 2007 à 18:00
Bonjour,

tel qu'est écrit ton code tu récupère la position de la chaine "# heure d'acquisition" dans ton objet liste.
L'erreur que tu obtiens est logique puisque c est dans les objets de ta liste (maListe[unePosition]) que tu as inséré les lignes de ton fichier.

Tu peux donc boucler sur tous les éléments de ta liste afin de regarder dans chacun d'entre eux si la chaine que tu cherches s'y trouve.

int laLigne=-1;
for(int i=0;i<maListe.Items.Count;i++)
{
if(maListe[i].IndexOf("tachaine")>0)
{
laLigne=i;
}
}

label1.Text = laLigne.ToString();

(je suis pas sur pour la récupération de la taille de la liste, le Items.Count, mais de mémoire je crois que c est ca)


Tu es sûr que la chaine en question n'apparait qu une fois dans le fichier ? Sinon tu ne récupèreras que la ligne de sa derniere occurence avec cette méthode.

Tiens nous au courant

Bonne fin de journée

_Syl_
0
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 09:44
ça à pas l'air de fonctionner:
message d'erreur: object (maliste[i]) ne contient pas de défintion pour Indexof...

int laLigne=-1;

for(i=0;i<maListe.Count;i++){

if(maListe[i].IndexOf(
"# liste des mesures : Balayage=xx.xx Amplitude=xx.xx Phase=xx.xx [amp. phase pour voies suivantes]")>0){

laLigne=i;

}

}
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 10:07
Bonjour,

Essaie avec un

if(maListe[i].ToString().IndexOf("tachaine")>0)



_Syl_
0

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

Posez votre question
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 10:30
Ca ne marche pas non plus...
j'ai i = -1
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 11:16
Ca veut dire que la ligne :
"# liste des mesures : Balayage=xx.xx Amplitude=xx.xx Phase=xx.xx [amp. phase pour voies suivantes]"

ne se trouve nul part dans ton fichier

Quel est ton code exact ?
0
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 11:38
La ligne existe bien à la ligne 75 donc dans maListe[74]
Mon code est le suivant:
StreamReader

sr =
new
StreamReader(Nomfichier[0]);

String ligne;

ArrayList maListe =
new
ArrayList();
while

((ligne = sr.ReadLine()) !=
null){

maListe.Add(ligne);

}

sr.Close();

 

for(i=0;i<maListe.Count;i++){

if (maListe[i].ToString().IndexOf("# liste des mesures : Balayage=xx.xx Amplitude=xx.xx Phase=xx.xx [amp. phase pour voies suivantes]
") > 0){

laLigne=i;

}

}

label1.Text=laLigne.ToString();
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 11:59
La ligne existe dans le fichier ?
avec des xx.xx ?
si tu ouvres ton fichier dans un editeur de texte et que tu fais une recherche pour "# liste des mesures : Balayage=xx.xx Amplitude=xx.xx Phase=xx.xx [amp. phase pour voies suivantes]" il trouve ta ligne ?
Quand tu debug tu peux voir la ligne dans ta liste ?
0
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 13:19
Quand j'ouvre le fichier avec notepad il me trouve bien  la ligne.
Par contre je sais pas utiliser le debug... ça fait une semaine que je fait du C# seulement.
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 14:47
Bon donc à priori la ligne existe dans le fichier

Pour le Debug, tu peux mettre des points d'arrets

Tu cliques dans la fine colonne grise à gauche pour qu'un point rouge apparaisse en face de la ligne sur laquelle tu souhaites que le programme s'arrete.
Tu peux en mettre un sur la ligne
for(i=0;i<maListe.Count;i++)

Ensuite quand tu vas lancer ton appli via la touche F5, lorsque le programme arrivera à cette ligne il s'arrêtera et tu pourras voir le contenu de ta liste soit en cliquant dessus soit dans l explorateur automatique (les onglets du bas)

une fois que tu peux voir ce qu'il y a dans ta liste regarde aux environs de liste[74] pour voir ce qu'elle contient.

N'hésite pas à reposer des questions si je n'ai pas été assez précis (ce qui est surement le cas :))

_Syl_
0
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 15:19
Ok, je vois à peu près. J'ai fait un point d'arret au niveau que tu m'a dit. Maliste contient bien ""# liste des mesures : Balayage=xx.xx Amplitude=xx.xx Phase=xx.xx [amp. phase pour voies suivantes]"  à l'indice 74... j'ai fait une exécution pas à pas et la valeur de lign ne change pas au passage à i=74...
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
24 août 2007 à 15:32
On laisse tomber le niveau de détails (début du post précédent) qui consistait à passer par une string intermediaire lors de la recuperation de la valeur d'un element de la liste)
0
yabiyou Messages postés 43 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 6 septembre 2007
24 août 2007 à 16:36
En effet c'était bien ça la solution!!
C'est bien la galère le C#
0
Rejoignez-nous