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

  FORUM HardWare.fr
  Programmation
  C++

  Compter les mot d'un fichier text en C

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compter les mot d'un fichier text en C

n°377061
EpoK
Let's burn
Posté le 29-04-2003 à 20:15:45  profilanswer
 

Et oui ca parait tout bete et ca l'est mais bon j'ai du mal :)
 
le principe était de refaire ce que fait la commande wc
 
les lignes et les car sans pb mais pour compter les mots il m'en manquait toujours
 
qu'elle est la meilleur solution ?
 
mici  [:volta]


Message édité par EpoK le 29-04-2003 à 20:15:59
mood
Publicité
Posté le 29-04-2003 à 20:15:45  profilanswer
 

n°377069
SquiZZ
Posté le 29-04-2003 à 20:22:42  profilanswer
 

cherche du coté de strtok, ca permet de décomposer une chaine de caractères en fonction d'une liste de délimiteurs que tu lui passe.
 
attention, strtok modifie la chaine qu'on lui passe.
 
exemple de code là :
http://www.cplusplus.com/ref/cstring/strtok.html (1er lien recherche google)
 
Comme délimiteurs, tu mets tout ce qui peut séparer des mots (espace, tab, virgule ...)
 
au lieu d'imprimer les éléments, tu comptes leur nombre et hop !
[edit]fautes de farpe


Message édité par SquiZZ le 29-04-2003 à 20:23:25
n°377075
Taz
bisounours-codeur
Posté le 29-04-2003 à 20:26:05  profilanswer
 

carrément pas.
 
 
tu lis caractere par caractere si c'est un espace tu es hors d'un mot, quand tu passe d'un espace à autre chose, c'est un mot

n°377083
EpoK
Let's burn
Posté le 29-04-2003 à 20:32:03  profilanswer
 

++Taz a écrit :

carrément pas.
 
 
tu lis caractere par caractere si c'est un espace tu es hors d'un mot, quand tu passe d'un espace à autre chose, c'est un mot
 


 
c'est le principe que j'ai appliqué mais aparement j'ai couillant quand je l'ai passé en C paske ça merde :/

n°377092
SquiZZ
Posté le 29-04-2003 à 20:36:42  profilanswer
 

il te manque combien de mots par rapport à ce que tu attends ?
 
un par ligne ?

n°377101
EpoK
Let's burn
Posté le 29-04-2003 à 20:45:44  profilanswer
 

SquiZz a écrit :

il te manque combien de mots par rapport à ce que tu attends ?
 
un par ligne ?
 


 
nop j'ai pensé a compter le dernier mot
 
c'est aléatoire défois 3 défois 50
 
proposé vos algo

n°377113
SquiZZ
Posté le 29-04-2003 à 21:05:38  profilanswer
 

EpoK a écrit :


 
nop j'ai pensé a compter le dernier mot
 
c'est aléatoire défois 3 défois 50
 
proposé vos algo


tu peux aussi poster ton code et un exemple de fichier a traiter en donnant ce que tu attends et ce que tu obtiens.
 
Sinon, en utilisant strtok  :na:  

Code :
  1. #include "stdlib.h"
  2. #include "string.h"
  3. int main(int argc, char* argv[])
  4. {
  5. FILE *fichier;
  6. int nb_lignes, nb_caracteres, nb_mots;
  7. char tampon[128];
  8. if(argc != 2)
  9. {
  10.  printf("erreur nombre arguments\n" );
  11.  return -1;
  12. }
  13. fichier = fopen(argv[1], "r" );
  14. if(!fichier)
  15. {
  16.  printf("erreur ouverture fichier\n" );
  17.  return -2;
  18. }
  19. //init variables
  20. nb_lignes = 0;
  21. nb_caracteres = 0;
  22. nb_mots = 0;
  23. while(fgets(tampon, 128, fichier))
  24. {
  25.  char *token ;
  26.  nb_lignes++;
  27.  nb_caracteres += strlen(tampon);
  28.  token = strtok(tampon, " \t" ); // on prend en compte les tabulations
  29.  while(token)
  30.  {
  31.   nb_mots++;
  32.   token = strtok( NULL, " \t" );
  33.  }
  34. }
  35. fclose(fichier);
  36. printf("lignes : %d     caractères : %d       mots : %d\n", nb_lignes, nb_caracteres, nb_mots);
  37. return 0;
  38. }


 
ca compte les retour chariot comme dans le nombre de caractères

n°377123
Evadream -​jbd-
Posté le 29-04-2003 à 21:15:52  profilanswer
 

Une petite solution qui vaut ce qu'elle vaut :
 

Code :
  1. ....
  2. int inside_word=0;
  3. int nmots=0; 
  4.   while (!feof(mon_fichier))
  5.      {
  6.       C=fgetc(mon_fichier);
  7.           if (isspace(C))
  8.              {
  9.               if (inside_word)
  10.                  {
  11.                   NMOTS++;
  12.                   inside_word=0;
  13.                  }
  14.              }
  15.           else
  16.              inside_word=1;
  17.          }
  18.       }
  19. ....

 
 

n°377124
Taz
bisounours-codeur
Posté le 29-04-2003 à 21:19:05  profilanswer
 

mauvaise mais tres bien pour le principe du bouleen dans_un_mot
 
 
le feof marche pas, fais une recherche sur le forum

n°377125
Evadream -​jbd-
Posté le 29-04-2003 à 21:21:46  profilanswer
 

ah, flute alors, j'ai sorti ca comme ca sans tester :/ Désolé.

mood
Publicité
Posté le 29-04-2003 à 21:21:46  profilanswer
 

n°377136
Evadream -​jbd-
Posté le 29-04-2003 à 21:31:37  profilanswer
 


evadream@skybreaker:~/poub/agenda$ gcc prout.c -Wall -pedantic -o compte
evadream@skybreaker:~/poub/agenda$ ./compte agenda.py
781 mots
evadream@skybreaker:~/poub/agenda$ wc agenda.py
    292     781    7876 agenda.py
evadream@skybreaker:~/poub/agenda$

 
 
Ca à pourtant l'air de fonctionner :/ S'agirait t'il d'une couille à la fflush(stdin) ?  
 

Code :
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.                                                                                                                                    
  4. int main(int argc, char* argv[]){
  5.                                                                                                                                    
  6.         FILE* mon_fichier = fopen(argv[1], "r" );
  7.                                                                                                                                    
  8.         int C;
  9.         int inside_word=0;
  10.         int nmots=0;
  11.                                                                                                                                    
  12.         /* while (!feof(mon_fichier)) */
  13.         while((c=fgetc(fichier)) != EOF) /* suite à la remarque de ++Taz */
  14.         {
  15.                 //C=fgetc(mon_fichier);
  16.                 if (isspace(C))
  17.                 {
  18.                         if (inside_word)
  19.                         {
  20.                                 nmots++;
  21.                                 inside_word=0;
  22.                         }
  23.                 }
  24.                 else
  25.                         inside_word=1;
  26.         }
  27.         fclose(mon_fichier); //edit etourderie (merci ++Taz)
  28.         printf("%d mots\n", nmots);
  29.         return 0;
  30. }


 
Merci pour l'éclaircissement !
 
@+


Message édité par Evadream -jbd- le 29-04-2003 à 21:38:31
n°377143
Taz
bisounours-codeur
Posté le 29-04-2003 à 21:35:21  profilanswer
 

vire le fclose(stdin);
 
et fais
 
while((c=fgetc(fichier)) != EOF)

n°377146
Evadream -​jbd-
Posté le 29-04-2003 à 21:39:30  profilanswer
 

Correction faite, etourderie. Je réfléchissais à ta remarque c'est pour ca :)  
 
Mais je n'ai toujours pas saisi pour quoi on ne devait pas le faire  ? Il s'agit d'un résultat indeterminé ?
 

n°377152
Taz
bisounours-codeur
Posté le 29-04-2003 à 21:43:03  profilanswer
 
n°377157
SquiZZ
Posté le 29-04-2003 à 21:45:38  profilanswer
 

Evadream -jbd- a écrit :

[fixed]
 

Code :
  1. FILE* mon_fichier = fopen(argv[1], "r" );


 


 
ca te dirait pas de tester si l'ouverture du fichier a réussi ?
 
[edit] et le nombre d'arguments lors de l'appel à ton programme ?


Message édité par SquiZZ le 29-04-2003 à 21:46:14
n°377158
Evadream -​jbd-
Posté le 29-04-2003 à 21:46:08  profilanswer
 

++Taz > En effet, merci pour ce topo !
 
@+


Message édité par Evadream -jbd- le 29-04-2003 à 21:49:03
n°377160
Evadream -​jbd-
Posté le 29-04-2003 à 21:47:52  profilanswer
 

SquiZz a écrit :


 
ca te dirait pas de tester si l'ouverture du fichier a réussi ?
 
[edit] et le nombre d'arguments lors de l'appel à ton programme ?


 
J'ai tapé ca en 30 secondes montre en main ( fclose(stdin)...[:acherpy] ), mon but était pas de faire un truc rock stable et de le distribuer à la terre entière pour remplacer wc, mais juste de tester mon raisonnement, sans autre prétention ;)

n°377164
chaica
Posté le 29-04-2003 à 21:50:00  profilanswer
 

genre...  
 
CHaiCA
 
ps : private joke

n°377168
Evadream -​jbd-
Posté le 29-04-2003 à 21:51:46  profilanswer
 

Mangeur de patates !

n°377172
Evadream -​jbd-
Posté le 29-04-2003 à 21:53:12  profilanswer
 

Epok > tu ne voudrais pas donner ton code, juste pour voir ce qui ne va pas dans ton algo, parce que finalement c'est ca le plus intéressant !


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

  Compter les mot d'un fichier text en C

 

Sujets relatifs
[HTML/PHP] Enregistrer plutôt qu'Ouvrir un fichier dans un lienafficher le texte d'1 fichier txt dans une page htm sans php possible?
Sous Visual C++ 6.0, créer un bouton Parcourir (fichier)[C] copier un fichier de données formatées via une fonction externe...
un fichier .3ds peut-il contenir des coordonnées de texture ?dans un fichier .ase, par quoi sont désigné les coordonnée de texture?
[C] Lire un fichier texteMauvais affichage du fichier
Lecture dans un fichier : ligne par lignetext 2 voice
Plus de sujets relatifs à : Compter les mot d'un fichier text en C


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