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

  FORUM HardWare.fr
  Programmation
  C

  Comment connaitre le nombre de char dans une fichier texte.txt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment connaitre le nombre de char dans une fichier texte.txt

n°1375366
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 10:40:29  profilanswer
 

voilà tout est dans la question
car si je veux imprimer sur stdin gràce à fgets il me faut une taille

Code :
  1. fgets(b,sizeof b,file


ou sinon quel autre fonction utiliser sans avoir besoin de spécifier la taille ?
 
merci d'avance :pt1cable:  :pt1cable:  :hello:

mood
Publicité
Posté le 26-05-2006 à 10:40:29  profilanswer
 

n°1375378
Taz
bisounours-codeur
Posté le 26-05-2006 à 11:01:37  profilanswer
 

while(getchar() != EOF) {
   i++;
}

n°1375381
nargy
Posté le 26-05-2006 à 11:07:18  profilanswer
 

une solution portable, mais uniquement pour des fichiers (pas des fluxs): utiliser fseek et ftell.

Code :
  1. long filesize=-1;
  2. if(fseek(file, 0, SEEK_END)<0)
  3.   perror("Error: file not seekable" );
  4. else
  5. {
  6.   filesize=ftell(file);
  7.   if(filesize<0)
  8.     perror("Error: file not positionnable" );
  9.   if(fseek(file, 0, SEEK_SET)<0)
  10.     perror("Error: can't rewind file" );
  11. }
  12. // à partir d'ici filesize contient la taille du fichier


n°1375401
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:29:19  profilanswer
 

merci à vous je vais prendre la première solution car je n'ai pas besoin de portabilité..
 
merci bcp à vous !

n°1375404
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2006 à 11:30:39  profilanswer
 

magiclazy a écrit :

voilà tout est dans la question
car si je veux imprimer sur stdin gràce à fgets il me faut une taille

Code :
  1. fgets(b,sizeof b,file




Une taille de ligne . Tu donnes une taille raisonnable (128, 256...). Si la ligne n'est pas lue complètement, le \n ne sera pas présent. Mais la lecture suivante lira la suite. 0 priori, pas de perte de données.

Citation :


ou sinon quel autre fonction utiliser sans avoir besoin de spécifier la taille ?


Rien de standard. Avec realloc() et fgetc() tu peux en faire une. C'est fun !


---------------
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°1375406
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2006 à 11:31:55  profilanswer
 

magiclazy a écrit :

merci à vous je vais prendre la première solution car je n'ai pas besoin de portabilité..

Elle est portable, mais je suis pas sûr qu'elle fasse ce que tu veux...
 


---------------
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°1375410
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:36:06  profilanswer
 

effectivment j'ai pas bien refléchi ..
sa ne va pas avec getchar  
 
mais en te relisant (emmanuel) effectivement c'est lecture de ligne et ce qu'il me faudrait c'est lecture de tout le fichier ..

n°1375414
Sve@r
Posté le 26-05-2006 à 11:46:18  profilanswer
 

magiclazy a écrit :

voilà tout est dans la question
car si je veux imprimer sur stdin gràce à fgets il me faut une taille

Code :
  1. fgets(b,sizeof b,file


ou sinon quel autre fonction utiliser sans avoir besoin de spécifier la taille ?


Si tu veux juste connaître la taille d'un fichier, tu peux utiliser "stat()"
Si tu veux le traiter (copier, afficher), tu fais une boucle de lecture+traitement
 

Emmanuel Delahaye a écrit :

Une taille de ligne . Tu donnes une taille raisonnable (128, 256...). Si la ligne n'est pas lue complètement, le \n ne sera pas présent. Mais la lecture suivante lira la suite. 0 priori, pas de perte de données.


Si c'est pour lire bloc par bloc sans avoir besoin de traiter la ligne, je privilégierais "fread()" plutôt que "fgets()"
Au pire, il y aura autant d'itérations avec l'une que l'autre...


Message édité par Sve@r le 26-05-2006 à 11:48:46

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375416
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:48:38  profilanswer
 

je vois sois et je vous dis demain merci  
 
ps:je bloque pour pour sortir le resultat d'un system(); vers un 'file' que j'ai crée plutot avec FILE*file=fopen();
merkiii

n°1375420
Sve@r
Posté le 26-05-2006 à 11:52:07  profilanswer
 

magiclazy a écrit :

je vois sois et je vous dis demain merci  
 
ps:je bloque pour pour sortir le resultat d'un system(); vers un 'file' que j'ai crée plutot avec FILE*file=fopen();
merkiii


 
system() lance un autre programme sans aucune intéraction possible avec le programme initial.  
 
Solution batarde mais immédiatement disponible :
Tu peux faire

Citation :

system("programme2 >fichier" )


Puis

Citation :

fopen("fichier", "r" (ou "rb", ça dépend))


 
Ou alors utiliser des mécanismes plus fin de communication entre programmes comme pipes, socket, files de messages, etc...


Message édité par Sve@r le 26-05-2006 à 11:52:48

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 26-05-2006 à 11:52:07  profilanswer
 

n°1375422
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:52:17  profilanswer
 

hap j'ai rien dis avec ce model sa devrait aller !!

Code :
  1. FILE *fin;
  2. FILE *fout;
  3. int c;
  4. fin=popen("netstats -a", "r" );
  5. fout=fopen("fic.txt", "w" );
  6. while ((c=fgetc(fin)) != EOF)
  7.     fputc(c, fout);
  8. fclose(fout);
  9. pclose(fin);


 
 
[EDIT]grilled !! j'essaye ta méthode !

Message cité 1 fois
Message édité par magiclazy le 26-05-2006 à 11:53:05
n°1375425
Sve@r
Posté le 26-05-2006 à 11:54:23  profilanswer
 

magiclazy a écrit :

grilled !! j'essaye ta méthode !


Non, le popen est meilleur que le system !!!


Message édité par Sve@r le 26-05-2006 à 11:55:08

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375426
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:54:30  profilanswer
 

je peux pas applique ta méthode car plus au dans le programme je génere le nom du *.txt ...

n°1375430
Sve@r
Posté le 26-05-2006 à 11:56:48  profilanswer
 

magiclazy a écrit :

je peux pas applique ta méthode car plus au dans le programme je génere le nom du *.txt ...


Mais si tu peux. Puisque le pgm2 génère lui-même le fichier écrit, tu peux faire juste "fopen("fic.txt", "r" )". Mais comme je l'ai dit, le popen est fait pour ça donc c'est préférable au system()


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375433
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 11:59:49  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <locale.h>
  4. void un_commande()
  5. {
  6. char tch[80+1];
  7. char fmt[80+1];
  8. struct tm *pdh;
  9. int nm;
  10. time_t intps;
  11. intps=time(NULL);
  12. pdh=localtime(&intps);
  13. setlocale( LC_TIME, "fr_FR" );
  14. strftime ( tch, 81,"%A %m %B %Y.txt",pdh);
  15. FILE *file;
  16. printf("\n\n    [ NAME OF FILE ] : %s",tch);
  17. FILE *fin;
  18. FILE *fout;
  19. int c;
  20. fin=popen("Gpresult", "r" );
  21. fout=fopen(tch,"a+" );;
  22. while ((c=fgetc(fin)) != EOF)
  23. fputc(c, fout);
  24. fclose(fout);
  25. pclose(fin);
  26. fclose(file);
  27. getch();
  28. }


 
je l'ai vite fait adapter sa à l'air de marcher

n°1375449
Sve@r
Posté le 26-05-2006 à 12:23:54  profilanswer
 

magiclazy a écrit :

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <locale.h>
  4. void un_commande()
  5. {
  6. char tch[80+1];
  7. char fmt[80+1];
  8. struct tm *pdh;
  9. int nm;
  10. time_t intps;
  11. intps=time(NULL);
  12. pdh=localtime(&intps);
  13. setlocale( LC_TIME, "fr_FR" );
  14. strftime ( tch, 81,"%A %m %B %Y.txt",pdh);
  15. FILE *file;
  16. printf("\n\n    [ NAME OF FILE ] : %s",tch);
  17. FILE *fin;
  18. FILE *fout;
  19. int c;
  20. fin=popen("Gpresult", "r" );
  21. fout=fopen(tch,"a+" );;
  22. while ((c=fgetc(fin)) != EOF)
  23. fputc(c, fout);
  24. fclose(fout);
  25. pclose(fin);
  26. fclose(file);
  27. getch();
  28. }


 
je l'ai vite fait adapter sa à l'air de marcher


Ben très vite fait alors.
1) même si le C permet maintenant de faire ce qu'on veut, on déclare quand-même les variables avant les instructions
2) tu fermes "file" sans l'avoir ouvert


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375451
magiclazy
citation personnelle associé
Posté le 26-05-2006 à 12:27:58  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <locale.h>
  4. void un_commande()
  5. {
  6. char tch[80+1];
  7. char fmt[80+1];
  8. struct tm *pdh;
  9. time_t intps;
  10. intps=time(NULL);
  11. pdh=localtime(&intps);
  12. setlocale( LC_TIME, "fr_FR" );
  13. strftime ( tch, 81,"%A %m %B %Y.txt",pdh);
  14. printf("\n\n    [ NAME OF FILE ] : %s",tch);
  15. FILE *file;     /* declaration du fichier *.txt de stockage*/
  16. FILE *fin;      /* declaration du fichier pour stocker la commande*/
  17. int c;
  18. fin=popen("Gpresult", "r" );    /*atribution du resultat a fin*/
  19. file=fopen(tch,"a+" );           /*creation ou ouverture du fichier de stockage*/
  20. while ((c=fgetc(fin)) != EOF)   /*si il n'y pas d'erreur et tant qu'on est pas à la fin deGpresult*/
  21. {fputc(c, file);}               /*écrire résultats*/
  22.                                 /*fermeture          */
  23. pclose(fin);                    /*        des        */
  24. fclose(file);                   /*          fichiers */
  25. }


 
voilà, enfin pour les commentaires mais si vous denoté une erreur flagrante de vocabulaire qui montre une imcoprehension de ma part n'hesitez pas !:):)


Message édité par magiclazy le 26-05-2006 à 12:35:40
n°1375475
kruso
Posté le 26-05-2006 à 12:53:21  profilanswer
 

dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ?  
 
Il doit bien y avoir un truc stat qui donne la taille non ?

n°1375486
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2006 à 13:13:50  profilanswer
 

kruso a écrit :

dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ?


Vu que sizeof (char) vaut 1 par définition, ça va pas nous avancer beaucoup...


---------------
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°1375548
Trap D
Posté le 26-05-2006 à 14:15:53  profilanswer
 

Emmanuel Delahaye a écrit :

Citation :

dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ?


Vu que sizeof (char) vaut 1 par définition, ça va pas nous avancer beaucoup...

On passe parfois de bon moment sur les forum de dev [:darcktom]

n°1375549
Sve@r
Posté le 26-05-2006 à 14:16:16  profilanswer
 

Emmanuel Delahaye a écrit :

Vu que sizeof (char) vaut 1 par définition, ça va pas nous avancer beaucoup...


[:ddr555] [:ddr555]
 

kruso a écrit :

dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ?


...and the winner is...


Message édité par Sve@r le 26-05-2006 à 14:17:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375615
kruso
Posté le 26-05-2006 à 15:53:55  profilanswer
 

bon tout le monde a beau l'air de se foutre de moi, je ne pige quand même pas pourquoi ça ne marche pas ...
 
la fonction int stat(const char *file_name, struct stat *buf); permet bien d'avoir la taille en octect non ?
 
Pour le sizeof(char) c'était juste par soucis de clarté, c'est vrai que c'est inutile xD
 

n°1375640
Sve@r
Posté le 26-05-2006 à 16:36:30  profilanswer
 

kruso a écrit :

la fonction int stat(const char *file_name, struct stat *buf); permet bien d'avoir la taille en octect non ?


Oui. Elle te donne les informations sur un fichier (type, propriétaire, droits, etc...) et, entre autres, sa taille. mais faut savoir s'en servir...

Code :
  1. struct stat statFic;
  2. stat("fichier", &statFic);
  3. printf("Taille: %lu\n", statFic.st_size);


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375675
kruso
Posté le 26-05-2006 à 17:40:05  profilanswer
 

Sve@r a écrit :

Oui. Elle te donne les informations sur un fichier (type, propriétaire, droits, etc...) et, entre autres, sa taille. mais faut savoir s'en servir...

Code :
  1. struct stat statFic;
  2. stat("fichier", &statFic);
  3. printf("Taille: %lu\n", statFic.st_size);



 
Ben comment s'en servir ça se trouve dans n'importe quel man :)
 
Et ça n'a que des avantages : on fait un seul appel systeme, on ne parcours pas tout le fichier ...
 
bref je pige pas pourquoi tout le monde se fout de moi  :D

n°1375687
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2006 à 18:01:55  profilanswer
 

kruso a écrit :

Ben comment s'en servir ça se trouve dans n'importe quel man :)
 
Et ça n'a que des avantages : on fait un seul appel systeme, on ne parcours pas tout le fichier ...
 
bref je pige pas pourquoi tout le monde se fout de moi  :D


Par de problèmes avec stat() (à part que c'est pas standard C, mais POSIX.1, portabilité non garantie...).  
 
C'est ta tirade sur le nombres d'octets qui nous a fait bien rire...


---------------
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/
mood
Publicité
Posté le   profilanswer
 


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

  Comment connaitre le nombre de char dans une fichier texte.txt

 

Sujets relatifs
supprimer premier et dernier caractère d'un fichierinserer un fichier txt
VB6 Creer un fichier TXT sur le disque dur[C] Copier un fichier octet par octet dans un tableau
Automatiser la copie d'un fichier vers un autre fichierQuel type de Fichier pour fichier avec clé(index)
[Access] requete SQL, comment connaitre la taille d'une chaine ?MySQL : fichier MYI corrompu
[Vb.Net] Charger fichier 3ds dans une form...??[SWT] Problème d'affichage de texte
Plus de sujets relatifs à : Comment connaitre le nombre de char dans une fichier texte.txt


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