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

Signaler
Messages postés
16
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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.
A voir également:

2 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
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
*/
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
64
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)