Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1517 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [ C vs Bash ] Détecter les lignes vides d'un fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C vs Bash ] Détecter les lignes vides d'un fichier texte

n°982754
udok
La racaille des barbus ©clémen
Posté le 15-02-2005 à 21:14:57  profilanswer
 

j'ai un pb : bash et c n'arrive pas à se mettre d'accord sur le nombre de lignes vides dans une fichier texte :
 

Code :
  1. int main() {
  2. FILE* fd = fopen("status","r" );
  3. char toto[150];
  4. int i=0;
  5. while (fgets(toto,150,fd))
  6.  if (toto[0] == '\n') i++;
  7. printf("nombre de paquets : %d\n",i);
  8. }


 
me renvoie : 10510
alors que :
grep ^$ status | wc -l
ne me renvoie que 10503 [:sisicaivrai]
 
c'est un fichier unix dont je n'ai pas étudié le contenu (trop gros)
 
vous savez de quoi cette différence peut venir ?


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
mood
Publicité
Posté le 15-02-2005 à 21:14:57  profilanswer
 

n°982755
Pillow
'cos the trees won't talk
Posté le 15-02-2005 à 21:16:40  profilanswer
 

Quelques lignes d'une longueur de 149 caractères (ou un multiple de 149) ? Le fgets lit 149 caractères, il retourne une valeur différente de 0, il y a nouveau appel à fgets mais le premier caractère est un \n -> tu as compté une ligne vide de trop [:petrus75]

n°982758
udok
La racaille des barbus ©clémen
Posté le 15-02-2005 à 21:18:26  profilanswer
 

ah pas bete ... normalement le fichier ne devrait pas avoir de lignes supérieur à 75 caractères, mais y-a p-t qq erreur
je vais augmenter la taille de qq zero pour voir [:joce]


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
n°982759
udok
La racaille des barbus ©clémen
Posté le 15-02-2005 à 21:19:30  profilanswer
 

rah merci c'est ça [:romf]
't1, ils pourraient respecter la charte ce qui ont fait l'erreur :o


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
n°982760
manatane
En vous remerciant, bonsoir
Posté le 15-02-2005 à 21:19:59  profilanswer
 

utilises getline (gnu) si tu es sous linux

n°982779
udok
La racaille des barbus ©clémen
Posté le 15-02-2005 à 21:34:44  profilanswer
 

manatane a écrit :

utilises getline (gnu) si tu es sous linux


 
merci, je connaissais pas, mais je préfère m'en tenir aux fonctions ansi  ;)


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
n°982961
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-02-2005 à 23:18:12  profilanswer
 

udok a écrit :

j'ai un pb : bash et c n'arrive pas à se mettre d'accord sur le nombre de lignes vides dans une fichier texte :

Code :
  1. int main() {
  2. FILE* fd = fopen("status","r" );
  3. char toto[150];
  4. int i=0;
  5. while (fgets(toto,150,fd))
  6.  if (toto[0] == '\n') i++;
  7. printf("nombre de paquets : %d\n",i);
  8. }


me renvoie : 10510
alors que :
grep ^$ status | wc -l
ne me renvoie que 10503 [:sisicaivrai]
 
c'est un fichier unix dont je n'ai pas étudié le contenu (trop gros)
 
vous savez de quoi cette différence peut venir ?


Oui, le programme C est faux. Le '\n', c'est la fin de ligne...


#include <stdio.h>
 
int main (void)  
{
   FILE* fp = fopen ("status", "r" );
 
   if (fp != NULL)
   {      
      unsigned long count = 0;
      int c;
      while ((c = fgetc(fp)) != EOF)
      {
         if (c == '\n')
         {
            count++;
         }
      }
      fclose (fp), fp = NULL;
      printf ("nombre de paquets : %lu\n", count);
   }
   return 0;
}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°982999
udok
La racaille des barbus ©clémen
Posté le 15-02-2005 à 23:28:10  profilanswer
 

je cherche pas à compter le nombre de \n dans le fichier
je cherche à compter le nombre de lignes vides  :o
 
sinon ça sert à quoi ton fp=NULL apres le fclose ?  :)


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
n°983392
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-02-2005 à 12:20:07  profilanswer
 

udok a écrit :

je cherche pas à compter le nombre de \n dans le fichier
je cherche à compter le nombre de lignes vides  :o


Désolé, mal lu l'énoncé. Effectivement, le fgets() avec [0] devrait fonctionner si le buffer est suffisamment grand (sinon, le vider avec la boucle de fgetc() qui va bien)...

Citation :

sinon ça sert à quoi ton fp=NULL apres le fclose ?  :)


Dès qu'une ressource n'est plus valide, j'invalide le pointeur. Vieux reflexe...


Message édité par Emmanuel Delahaye le 16-02-2005 à 12:21:53

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°983454
udok
La racaille des barbus ©clémen
Posté le 16-02-2005 à 13:14:29  profilanswer
 

ok merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [ C vs Bash ] Détecter les lignes vides d'un fichier texte

 

Sujets relatifs
[C++]Fichier .cs[Bash] les tableaux
[RESOLU] changement de valeur pour un fichier csvfonction javascript pour ouvrir un explorer de fichier
lecture fichier en hexa??VBS - Faire un diff entre deux fichier date de modification
Modifier (et non remplacer) contenu d'un fichier texteProblème texte dynamique
erreur de lecture dans un fichier 
Plus de sujets relatifs à : [ C vs Bash ] Détecter les lignes vides d'un fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR