Bonjour,
Je suis débutant en C++ et je suis entrain d'ébaucher un programme qui se comporte de la manière suivante :
-D'un côté, il y a des fichiers textes qui contiennent des listes de mots : fichiers de vocabulaire.
-De l'autre côté, il y a des fichiers qui contiennent des textes : fichiers que l'on va comparer avec les fichiers de vocabulaires.
J'ai plusieurs fonctions,
1: une qui permet de transformer les fichiers textes en vector <string>,
cette dernière fait appel à une autre qui s'occupe de mettre ce texte en minuscule :
a -La fonction textToList:
b-La fonction ToLower:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 vector<string> textToList(ifstream& txt, string ligne){ vector<string> vliste; while(! txt.eof()){ txt >> ligne; toLower(ligne); vliste.push_back(ligne); } return vliste; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void toLower(basic_string<char>& s) { for (basic_string<char>::iterator p = s.begin(); p != s.end(); ++p) { *p = tolower(*p); } }
2: Et enfin, une dernière qui, elle,
me permet de rechercher dans le texte les mots de vocabulaire,
et,
si ces derniers sont présents, de les remplacer par le nom du fichier (dans lequel a été trouvé le mot de vocabulaire).
a- La fonction searcher:
dans laquelle: voc est la liste de vocabulaire, txt est le texte, name est le nom du fichier duquel provient la liste de vocabulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 vector<string> searcher(vector<string> voc, vector<string> txt, string name){ for(int i = 0; i < txt.size(); i++){ for(int j=0; j < voc.size(); j++){ if(voc[j] == txt[i]){ txt[i] = name; } } } return txt; }
Je rencontre un résultat inattendu et cela à cause d'une erreur que je ne comprends pas:
Comme on le voit, "filenames" reçoit les noms de fichier (stockés dans un fichier "liste.txt")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 int main() { vector <string> filenames; string ligne; vector<string> tableau; vector<string> finale; ifstream liste("liste.txt"); ifstream txtFile("texts.txt"); vector<string> texte; if(liste){ // Text to list transforme le fichier liste en vecteur filenames = textToList(liste, ligne); texte = textToList(txtFile, ligne); // Premier test: cout << "Premier test :" << endl; // Ecrit les noms des fichiers for(int k = 0; k < filenames.size() - 1; k++){ cout << filenames[k] << endl; } //Deuxième test cout << endl << endl << "deuxieme test :" << endl << endl; //ouvre les fichiers de vocabulaire de la liste un à un for(int i = 0; i < filenames.size()-1; i++){ ifstream file(filenames[i].c_str()); cout << "Nom du fichier : " << filenames[i] << endl << endl; //Text to list, transforme chaque fichier de vocabulaire en un même vecteur tableau = textToList(file, ligne); cout << "Mot original : " << tableau[i] << endl; finale = searcher(tableau, texte, filenames[i]); cout << "Mot Final : " << finale[i] << endl; cout << "Nom du fichier maintenant : " << filenames[i] << endl; tableau.clear(); } } else{ cout << "ERROR:2" << endl; } for(int j = 0; j < finale.size()-1; j++){ cout << finale[j] << endl; } return 0; }
ces noms de fichiers sont ensuite utilisés par le flux "file" dans une boucle for:
ifstream file(filenames[i].c_str());
"Tableau" reçoit le vocabulaire contenu dans ce fichier, il est une liste de vocabulaire, qui est censée se remplir
puis se vider à chaque nouveau fichier ouvert par "file".
Ensuite, le texte dans lequel on chercher ses mots est stocké dans "texte", et le résultat dirigé vers "finale".
Donc, le résultat de "finale" devrait être le texte initial qui, lorsqu'il comporte un mot de ces fichiers de vocabulaire,
est remplacé par l'expression contenue dans filenames[i].
Mais cela ne fonctionne pas :
Dans le fichier liste.txt :
Dans le fichier com.txt:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 com.txt test.txt tt.txt
test.txt:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 comment ça va ?
tt.txt:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 hello world
Code : Sélectionner tout - Visualiser dans une fenêtre à part bonjour gars
Dans le fichier texts.txt (le texte dans lequel on recherche):
Code : Sélectionner tout - Visualiser dans une fenêtre à part bonjour salut alors comment ça va bonjour salut hello comment ça va mon gars bonjour mon vieux bonjour les fraises patates douces c'est cool
(quand-il s'agit de choisir des exemples pour faire des tests, je ne connais pas vraiment de carences en inspiration.)
Et, je reçois ce résultat :
Le système que j'emploie ne semble prendre compte que d'un seul fichier.
(je m'excuse de ce post un peu long)
Sauriez-vous, avec votre regard neuf et savant, m'éclairer sur ce problème ?
Je vous remercie de votre patience, et j'espère que ce n'est pas trop confus.
Merci beaucoup.
Partager