Problème de Readline [Résolu]

Signaler
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Bonjour,



J'aimerais utiliser la fonction readline pour parcourir un fichier
texte. J'ai remarqué que cela pose problème en exécution en pas à pas.
Readline continue à parcourir les lignes entre chaque "exécuter
l'instruction suivante".

Voilà le texte que j'ai dans mon fichier, et je voudrais retrouver la date de la première ligne commencant par "MES" :



Ligne1;var1;var2

Ligne2;var3;var1

Ligne3;var4

LigneN;varN;varM;varW

MES1;28/06/2005;11:12:50;var3;etc...

MES2;28/06/2005;11:12:51;var2;etc...



Voilà comment je procède :



string DateDebut= "";

using (StreamReader sr = new StreamReader(fileName))

{

while (!(sr.ReadLine().StartsWith("MES")))

{

//ici, ne fait rien

}

DateDebut = sr.ReadLine(); //quand j'arrive ici, sr.readline() vaut " MES2;28/06/2005; 11:12:51;var2;etc..." et pas "MES1;28/06/2005;11:12:50;var3;etc..."

sr.Close();

}

string[] temp = DateDebut.Split(';');

DateDebut = temp[1];



Le problème est qu'il me retourne la ligne commençant par "MES2", cad une ligne trop loin.



Autre question sur readline :



Comment retourner la dernière ligne de mon fichier qui commence elle aussi par "MES" ?

9 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
justement non, ta première question n'est pas résolu avec ta solution

puisqu'a chaque fois que tu fais se.ReadLine(), avances d'une ligne dans ton fichier, donc tu avances là de 2 lignes à chaque fois...

la solution :
do {
DateDebut = sr.ReadLine();
} while (!DateDebut.StartWith("MES"));

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
la seconde solution est plus "corsée" :

string ligne;
while ((ligne = sr.ReadLine()) != null) {
if (ligne.StartsWith("MES")) {
DateFin = ligne;
}
}


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
normal...
using (StreamReader sr = new StreamReader(fileName))
{
while (!(DateDebut =sr.ReadLine().StartsWith("MES")))
{
//ici, ne fait rien
}
//DateDebut = sr.ReadLine(); //quand j'arrive ici, sr.readline() vaut "MES2;28/06/2005;11:12:51;var2;etc..." et pas "MES1;28/06/2005;11:12:50;var3;etc..."
sr.Close();
}


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Bon la première question est résolue, je fais ca :

while (!(sr.ReadLine().StartsWith("MES")))
{
//ici, ne fait rien
DateDebut = sr.ReadLine();
}

Par contre pour la deuxième question :-) suis tjrs preneur
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
string DateDebut="";

string sLigne;
using (StreamReader sr = new StreamReader(fileName))
{

sLigne=sr.ReadLine();

while (sLigne)
{

if (!sLigne.StartsWith("MES")) sLigne=sr.ReadLine();

else

{

//ton traitement

}



}

sr.Close();



Celà devrait fonctionner


Théo
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Théo, ta méthode est la même dans le principe que sebmafate.



Juste un pitit truc qui n'allait pas (je l'ai testé aussi)

while(sLigne!=null) car sLigne n'est pas un bool. Sinon ca marche, merci.



>Seb : tes deux méthodes marchent pour ce que je voulais, cimer
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Seb est trop rapide...
Théo
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
nan... pas trop rapide... j'avais la solution en tête... c'est différent :p


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Messieurs, ne nous emportons pas,



ne vous inquiétez pas, j'aurais d'ici peu de temps, d'autres fabuleuses
énignes concernant les readline, et autres méthodes pour parcourir un
fichier texte.



A vous de vous départagez, lol...