Bonjour à tous,
Je cherche à obtenir la dernière ligne d'un fichier sans lire le fichier en entier (car il fait 500 000 lignes).
J'ai trouvé ce code (message de sea otter) : http://www.webhostingtalk.com/archiv.../t-327009.html
Je comprends ce que fais ce code mais pas la démarche algorithmique. Notamment :
Ca n'a aucun sens pour moi. Cette ligne place le curseur à length du début du fichier (c'est-à-dire à la fin) ou à BUFFSIZE si ce dernier est inférieur. WTF ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part is.seekg(length-min(length,_LL_BUFFSIZE_),ios::beg); // seek back from end a short ways
La suite m'est tout aussi incompréhensible :
A commencer par la seule affectation de lastLine qui est commentée par défaut... De toute évidence ce code est faux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // read in each line of the file until we're done buff[0]=0; do { // uncomment if you want to skip empty lines or lines that start with whitespace // fancier logic is probably called for /* if (!isspace(buff[0]) && buff[0] != 0) lastLine = buff; */ } while (is.getline(buff, _LL_BUFFSIZE_));
Pourtant le demandeur semble satisfait.
Donc :
1) Que fait ce code ?! Est-ce qu'il vaut quelque chose moyennant une correction ?
2) Sinon comment obtenir la dernière ligne d'un fichier sans le lire (avec seekg(ios::end) je suppose) sachant qu'on ne connait pas la longueur de celle-ci ?
Merci d'avance.
Partager