Compter le nombre des ligne d'une fichier en c

Signaler
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
-
Messages postés
551
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
-
Bonjour mes amis,
j'essaye de faire un programme qui retourne les nombre des ligne de mon fichier txt :
//*
nom
1
2
3
prenom
adresse
*//

alors que le nombre des ligne que je besoin est les nombre des ligne contient les entiers(3 ligne),j'essaye avec ce code ici mais il ne retourne pas le nombre que j'ai besoin :
while(!feof(f))
    {
     fscanf(f,"%s",&ch);
    if (strcmp(ch,"bonjour")!=0)
    {
             if ((fgetc(f)=='\n')&&(strcmp(ch1,"ok")==0))
        {
            nb++;
        }
    }
    }


j'attend vos aides et vos propositions,et merci :)

7 réponses

Messages postés
14673
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2020
143
Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
96
Salut,

Pour lire ton fichier ligne par ligne, tu peux utiliser la fonction 'getline':

#include <stdio.h>  // FILE, fopen etc..
#include <stdlib.h> // free+EXIT_XXXX
#include <string.h> // pour strerror
#include <errno.h> // pour errno

int main(int argc, char** argv) {
  FILE* file = NULL;
  char* buffer = NULL;
  size_t length = 0, lines = 0;
  
  if(argc < 2) {
    fprintf(stderr, "Invalid file name.\n%s <filename>\n", argv[0]);
    return EXIT_FAILURE;
  }

  /* ouverture du fichier */
  file = fopen(argv[1], "r");
  if(!file) {
    fprintf(stderr, "Open: (%d) %s\n", errno, strerror(errno));
    return EXIT_FAILURE;    
  }
  
  /* lecture ligne par ligne et comptage des lignes */
  while (getline(&buffer, &length, file) != -1) ++lines;
  /* libération du buffer alloué par getline */
  if(buffer) free(buffer);
  /* fermeture du fichier */
  fclose(file);

  /* affichage du nombre de lignes */
  printf("The file %s contains %zu lines.\n", argv[1], lines);

  return EXIT_SUCCESS;
}

merci pour votre reponse,mais je travaille avec la langage C pas C++ et pour getline est utilisée en C++ !!
Messages postés
28829
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2020
332
Bonjour,
Et avec
 fgets() 
?

http://www.mrx.net/c/readfunctions.html

.
Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
96
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
merci pour votre reponse,mais je travaille avec la langage C pas C++ et pour getline est utilisée en C++ !!


Tu es quand même culotté ! Twinuts t'apporte une solution propre, prête à l'emploi, en C, et toi tu ne la testes même pas, et déclare sa méthode invalide...
Tu n'as visiblement même pas pris le temps de lire ni même de tester ce qu'il te proposait (alors qu'en plus il t'avait commenté le code).

@Twinuts: le "if(buffer)" devant "free(buffer);" n'est pas nécessaire. La fonction free, fait déjà cette vérification. Il est tout à fait correcte de faire un free(NULL). Juste pour pinailler :).

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
551
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
Une librairie écrite en assembleur devrait résoudre le problème.
les protos devront être des stdcall
http://codes-sources.commentcamarche.net/source/100782-manipuler-du-texte-avec-des-numeros-de-lignes


--