Nombre de documents où un terme apparaît
thebestgirl
Messages postés
11
Statut
Membre
-
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.
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é
j'espère que vous pouvez m'aider à trouver mes fautes.
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.
A voir également:
- Nombre de documents où un terme apparaît
- Nombre de jours entre deux dates excel - Guide
- Comment reduire la taille d'un document - Guide
- Clé usb n'apparait pas - Guide
- Comment enregistrer un mail dans mes documents - Guide
- Documents récents windows 11 - Guide
1 réponse
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.
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.
merci bien pour ton aide, en fait ça m'aide à plus optimiser mon code,
Pour le résultat de mon code, il devait être
aulieu de
car le terme 118 apparait dans les fichiers d,e et f