[C] nombre de lignes dans un fichier

nombre de lignes dans un fichier [C] - C++ - Programmation

Marsh Posté le 01-05-2002 à 23:13:37    

Existe-t-il une fonction ou astuce permettant de recuperer le nombre de lignes dans un fichier?? Je sais qu'on pouvait le faire sous linux grace a un "grep", ms la chuis sous windows... J'entends par ligne une chaine de caractere se terminant par '\n'. Ou je dois coder la fonction.
Plus generalement existe-t-il une fonction qui permet de compter le nombre d'occurence d'un caractere ou d'une string dans un fichier.
Merci d'avance!

Reply

Marsh Posté le 01-05-2002 à 23:13:37   

Reply

Marsh Posté le 02-05-2002 à 03:07:06    

Euh, pour compter les lignes d'un ou plusieur fichiers, sous unix, rien ne vaut wc.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-05-2002 à 08:17:34    

Salut,
si tu manipules des fichiers textes, tu peux utiliser fgets, qui lit une ligne. T'as pas a t'occuper des '\n' ou autre, fgets le fait pour toi.
Dans une boucle "tant que pas fin de fichier", tu fais des fgets et incremente un compteur de lignes ...
Ca peut cependant etre un peu penible a coder, etant donne qu'il faut tenir compte du cas ou la ligne a lire ne rentre pas dans le buffer passe a fgets ... si tu ne connais pas la taille maximale d'une ligne et que tu ne manipules pas les lignes, c'est peut etre mieux de coder ta fonction.
Pour trouver une occurences d'une string ou d'un caractere dans une autre string, y'a strchr, strstr ...
mais a ma connaissance ca ne les compte pas ... et ca ne travaille pas directement sur des fichiers ... mais c'est pas la mort a coder ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-05-2002 à 08:46:05    

Si on lit le fichier en binaire caractère par caractère, on ne s'encombre pas d'un buffer et ne compte que les CR (et/ou LF selon UNIX/Mac). Ca va vite mais oblige ensuite à relire le fichier si on veut explorer son contenu :D.

Reply

Marsh Posté le 02-05-2002 à 09:05:18    

il n'y a pas un truc dans la fonction sat qui donne la taille u'un fichier ; l e nombre de ligne ....
sinon , tu peux faire  
 
#include<unistd.h>
#include<stdio.h>
FILE *f;
system("wc -l Monfichier > tmp" );
f = fopen("tmp","rw" );
fscanf(f,"%d",&nb_ligne);
 
ca t'evitera de parcourir tout le fchier


---------------

Reply

Marsh Posté le 02-05-2002 à 09:18:26    

electricblue a écrit a écrit :

Existe-t-il une fonction ou astuce permettant de recuperer le nombre de lignes dans un fichier?? Je sais qu'on pouvait le faire sous linux grace a un "grep", ms la chuis sous windows... J'entends par ligne une chaine de caractere se terminant par '\n'. Ou je dois coder la fonction.
Plus generalement existe-t-il une fonction qui permet de compter le nombre d'occurence d'un caractere ou d'une string dans un fichier.
Merci d'avance!  




 
Un petit coup de perl devrait te faire ca sans pb.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-05-2002 à 09:37:24    

HelloWorld a écrit a écrit :

si tu manipules des fichiers textes, tu peux utiliser fgets, qui lit une ligne. T'as pas a t'occuper des '\n' ou autre, fgets le fait pour toi.


Le problème avec fgets, c'est s'il y a des lignes trop longues...
Avec les extensions GNU, tu as getline qui n'a pas cette limitation, mais sinon le plus simple est de compter le nombre de caractères '\n' dans le fichier.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 02-05-2002 à 16:15:03    

Merci a tous pr vos reponses.
Je crois que je vais utiliser la methode de helloworld, car mon fichier est relativement petit et je connais la taille max d'une ligne.

Reply

Marsh Posté le 02-05-2002 à 16:27:20    

"Je crois que je vais utiliser la methode de helloworld"
 

Code :
  1. while(!feof(fic))
  2.     {
  3.         fgets(buffer, MAXSIZE, fic);
  4.         nb_lignes++;
  5.     }


 
(C) HelloWorld ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-05-2002 à 16:42:55    

HelloWorld a écrit a écrit :

"Je crois que je vais utiliser la methode de helloworld"
 

Code :
  1. while(!feof(fic))
  2.     {
  3.         fgets(buffer, MAXSIZE, fic);
  4.         nb_lignes++;
  5.     }


 
(C) HelloWorld ;)  




 
Mdr, je sais qd meme coder ce genre de chose, d'ailleurs j'ai ecrit:
 

Code :
  1. while(fgets(buffer,MAXSIZE,fich)) {
  2.    cpt++;
  3. }


 
Evidement, la validite du descripteur de fichier est teste avec le while.

Reply

Marsh Posté le 02-05-2002 à 16:42:55   

Reply

Marsh Posté le 02-05-2002 à 17:14:11    

Heu, c'est juste le "la methode a ..." qui m'a fait sourire ...
d'ou le (C) => copyrigth ... *humour* :)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-05-2002 à 09:12:39    

De chercher les caractères "fin de ligne", ça permet accessoirement de mesurer la longueur effective de la ligne la plus longue avant de bufferiser...  
Le jour où il y a une ligne de 50000 caractères (humour), buffer trop petit.. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed