Nombre de fichiers où appartient un terme
Résolu
thebestgirl
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
overcode Messages postés 119 Date d'inscription Statut Membre Dernière intervention -
overcode Messages postés 119 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un dossier de fichiers textes et je voulais les parcourir mot à mot pour savoir le nombre de fichiers où appartient chaque terme.
le résultat de ce code est erroné, la faute est dans la fonction nbfiles, j'ai pas su le calculer,
svp aidez moi, pleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaase.
j'ai un dossier de fichiers textes et je voulais les parcourir mot à mot pour savoir le nombre de fichiers où appartient chaque terme.
le résultat de ce code est erroné, la faute est dans la fonction nbfiles, j'ai pas su le calculer,
svp aidez moi, pleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaase.
#include <dirent.h> #include <stdio.h> #include <iostream> #include <fstream> #include <string> #include <iomanip> #include <map> using std::string; using std::ifstream; bool isValid(const std::string& path) { return !path.empty() && path != "." && path != ".."; } void fillMap(std::map<std::string, int>& map, const std::string& filename) { std::ifstream entree(filename.c_str()); std::string s; while (entree >> s) ++map[s]; } bool exists(const std::string& filename, const std::string& pattern) { std::ifstream entree(filename.c_str()); std::string s; while (entree >> s) if (s == pattern) return true; return false; } void nbfiles(const std::string& filename) { std::map<std::string, int> map; fillMap(map, filename); int nbFile = 0; int som = 0; typedef std::map<std::string, int>::const_iterator iter; for (iter it = map.begin(); it != map.end(); ++it) if (exists(filename, it->first)) {++nbFile; break; } for (iter it = map.begin(); it != map.end(); ++it) std::cout << "Le nombre de fichier contenant le terme " << it->first << " est " << nbFile << std::endl<< std::endl; } int main() { static const std::string folder = "in"; string s; DIR* rep = opendir(folder.c_str()); if (rep) { struct dirent* lecture; int nbFile = 0; int totalFile = 0; while ((lecture = readdir(rep))) { if (!isValid(lecture->d_name)) continue; nbfiles(folder + "/" + lecture->d_name); std::cout << std::endl; ++totalFile; } closedir(rep); std::cout << "Le nombre de fichiers est : " << totalFile << std::endl; } system ("pause"); return 0; }
A voir également:
- Nombre de fichiers où appartient un terme
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- A qui appartient ce numéro - Guide
- Nombre de jours entre deux dates excel - Guide
- Comment ouvrir un fichier bin ? - Guide
4 réponses
Bonsoir,
On ne comprend pas clairement la finalité de ton programme. Le terme à chercher dans les fichiers texte, quel est-il ????
On ne comprend pas clairement la finalité de ton programme. Le terme à chercher dans les fichiers texte, quel est-il ????
bonjour, et merci pour ta réponse;
en fait j'ai voulu chercher pour chaque terme existant dans le dossier (dans tous les fichiers du dossier) le nombre de fichier qui comporte ce terme, voila la solution :
en fait j'ai voulu chercher pour chaque terme existant dans le dossier (dans tous les fichiers du dossier) le nombre de fichier qui comporte ce terme, voila la solution :
#include <dirent.h> #include <string> #include <vector> #include <fstream> #include <iostream> #include <map> #include <set> #include <math.h> bool isValid(const std::string& path) { return !path.empty() && path != "." && path != ".."; } void fillSet(std::multiset<std::string>& liste, const std::string& filename) { std::ifstream entree(filename.c_str()); if (!entree) { std::cerr << "Unable to read the file" << std::endl; return; } std::string s; std::set<std::string> toAdd; while (entree >> s) toAdd.insert(s); liste.insert(toAdd.begin(), toAdd.end()); } void fillMap(std::map<std::string, int>& map, const std::string& filename) { std::ifstream entree(filename.c_str()); std::string s; while (entree >> s) ++map[s]; } void nbFiles( const std::string& filename) {std::multiset<std::string>::const_iterator iter; std::multiset<std::string> liste; static const std::string folder = "in"; DIR* rep1 = opendir(folder.c_str()); std::map<std::string, int> map; fillMap(map, filename); int nbfic = 0; typedef std::map<std::string, int>::const_iterator iter3; std::cout << "\t fichier " << filename << std::endl; std::cout<<std::endl; for (iter3 it = map.begin(); it != map.end(); ++it) { if (rep1) { struct dirent* lecture1; while ((lecture1 = readdir(rep1))) { if (!isValid(lecture1->d_name)) continue; std::string filename = lecture1->d_name; fillSet (liste, folder + "/" + filename); } for (iter=liste.begin(); iter!=liste.end(); iter++) { if (it->first == *iter) nbfic++; } } closedir(rep1); std::cout << "* nombre de fichiers ou appartient le terme " << it->first << " est " << nbfic << std::endl; nbfic=0; }} int main() { static const std::string folder = "abc"; DIR* rep = opendir(folder.c_str()); if (rep) { struct dirent* lecture; while ((lecture = readdir(rep))) { if (!isValid(lecture->d_name)) continue; nbFiles (folder + "/" + lecture->d_name); } closedir(rep); } system("pause"); return (0); }