Compter le nombre de lignes dans un fichier texte de bas en haut.

kikibodel Messages postés 16 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 5 juin 2008 - 2 avril 2008 à 01:39
cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 5 avril 2008 à 19:08
Bonjour,

J'aimerais trouver un programme ( C sharp ) qui me permet de compter le nombre de lignes dans un fichier texte de BAS en HAUT et non de haut en bas comme on le faerais habituellement.
Le but de mon programme est de recopier les 720 DERNIERES lignes de ce fichier dans un autre fichier texte.

Si quelqu'un a une idée...

Merci d'avance.

2 réponses

cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 avril 2008 à 19:08
Salut, 

Si on parle de très gros fichiers, ça peut être handicapant.
Enonçont le problème différemment : il s'agit ici de copier toutes les données situées entre le 721ème caractère LF en partant de la fin et la fin du fichier.
Pas besoin de lire 2 fois le fichier pour ça, mais juste de lire 2 fois la fin :-)
Code plus compliqué mais si le fichier source fait plusieurs Go, ça fait pas mal d'I/O d'économie.
En cas d'utilisation de FileStream, garder à l'esprit l'encodage du fichier : si UTF16LE, il ne s'agit pas de garder la moitié du caractère LF en démarrant la copie (si UTF32LE, 3/4 du caractère).

Bref : voir suivant le besoin ;-)

/*
coq
MVP Visual C#
CoqBlog
*/
1
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
2 avril 2008 à 08:33
Hello,

Si la place mémoire à très court terme n'est pas un problème, tu peux le faire comme ça :

public

void CopyLastLines(
string sourceFile,
string destFile,
int maxLineCount)
{

   string[] lines =
File.ReadAllLines(sourceFile);

   string[] linesToCopy ;

   if (lines.Length > maxLineCount)

      Array.Copy(lines, lines.Length - maxLineCount, linesToCopy, 0, maxLineCount);
   else
      linesToCopy = lines;

   File.WriteAllLines(destFile, linesToCopy);
}
Autrement, si le fichier source est très volumineux et la mémoire limitée, il te faudra lire 2 fois le fichier. Une fois pour connaître le nombre de ligne, et une fois pour prendre que les lignes voulues.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Rejoignez-nous