Nombre de documents où un terme apparaît

thebestgirl Messages postés 11 Statut Membre -  
thebestgirl Messages postés 11 Statut Membre -
Bonjour,
ce programme permet de déterminer le nombre total de fichiers dans le répertoire "in"; vérifie si le terme "118" existe dans chaque fichier du répertoire et compte le nombre de fichiers contenant ce terme.
#include <stdio.h>
#include <dirent.h>
#include <iostream>
#include <fstream>
#include <string>
using std::ifstream;
using std::string;

int main (void)
{
   DIR *rep = opendir ("in" );

   if (rep != NULL)
	 {
	  struct dirent *lecture;
	  int i=0,j=0, existe=0;
       // i est le nombre de fichiers dans le répertoire  
       // j est le nombre de fichiers contenant le mot 118
      // existe prend 1 si le terme 118 existe dans le fichier
	  ifstream entree;
	  string s;
	  while (lecture = readdir (rep))
		{
		   printf ("%-25s    ", lecture->d_name);
		   i++;
		   std::ifstream entree (lecture->d_name);
		   while ( entree >> s)
			{
			  if (s == "118")
				{ existe=1;
				  j++;
				  break;
				}
			}
		  if (existe==1)
		  std::cout << "existe" << std::endl;
		  else std::cout << "non" << std::endl;
		  existe=0;
		}
	  if (j>0)  std::cout << "le nombre de fichier contenant le terme est "<< j << std::endl;
	  entree.close();
	  closedir (rep), rep = NULL;
   printf ("le nombre de fichiers est : %d\n", i-2);
   }
   
   system ("pause");
   return 0;
} 


le répertoire "in" contient 6 fichiers a,b,c,d,e,f et g dont d,e et f contiennent le terme "118".
le résultat obtenu par ce code est erroné
.                         non
..                        non
a                         non
b                         non
c                         non
d                         non
e                         existe
f                         existe
g                         existe
le nombre de fichiers contenant le terme est 3
le nombre de fichiers est 7


j'espère que vous pouvez m'aider à trouver mes fautes.

1 réponse

swed
 
Bonjour,
J'ai pas bien compris ce qui ne va pas dans les résultats que tu obtiens.
Mais j'ai quelques remarques concernant ton code :

- le entree.close devrait être fait à la fin de la boucle while, pas après la boucle.

- la variable 's' devrait être réinitialisée à blanc avant chaque nouvelle lecture

- les variables nommées 'i' , 'j', et 's' rendent le code incompréhensible. Pourquoi ne pas mettre un nom explicite?

- la variable 'existe' serait pas mieux en booléen ?

- le break est confus, je verrais mieux une boucle while ( entree >> s && existe==0 ), sans break

- je ne suis pas fan du mélange c/c++ printf/cout ; mais bon, c'est une question de goût...

En espèrant que ça t'aide ;
Cordialement, M.
0
thebestgirl Messages postés 11 Statut Membre
 
bonjour,
merci bien pour ton aide, en fait ça m'aide à plus optimiser mon code,
Pour le résultat de mon code, il devait être
.                         non
..                        non
a                         non
b                         non
c                         non
d                         existe
e                         existe
f                         existe
g                         non
le nombre de fichiers contenant le terme est 3
le nombre de fichiers est 7

aulieu de
.                         non
..                        non
a                         non
b                         non
c                         non
d                         non
e                         existe
f                         existe
g                         existe
le nombre de fichiers contenant le terme est 3
le nombre de fichiers est 7

car le terme 118 apparait dans les fichiers d,e et f
0