Bonjour à tous,
Depuis deux jours je bataille pour trouver ce qui cloche mais je ne vois pas alors si quelqu'un peut m'apporter sa lumière...
Explication en bref et problème:
La fonction ci-dessous à pour but de rechercher une partie d'un texte donner par l'utilisateur(à l'aide de QLineEdit) dans tout les fichiers .txt du répertoire. Autrement dit la fonction "recherche" tout les fichiers .txt du répertoire(le répertoire et lui aussi donné par l'utilisateur à l'aide de QLineEdit), les mémorise (avec QStringList), et recherche si le texte est présent ou non dans ces fichiers.
J'ai effectué énormément de tests(et je crois que le mot est faible, j'ai le même problème sur beaucoup d'autres fonctions similaires) .La fonction semble fonctionner correctement dans le répertoire ou se situe le .exe de mon programme mais pas quand je change de répertoire (elle lit bien les fichiers du répertoire que je lui donne mais elle ne lit pas ce que je lui demande de rechercher dans le nouveau fichier).
Par exemple:
Si j'ai mon .exe dans le répertoire c:\monProgramme\
un fichier texte.txt avec "abcd" dedans, je recherche "abcd" elle me trouve bien le fichier .txt et me trouve aussi "abcd".
Même configuration mais dans un autre répertoire, elle me trouve bien le fichier text.txt mais pas "abcd".
Les grandes lignes de ma fonction:
J'ai simplifié le code pour afficher que les grandes lignes.
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 void fenetrePrincipal::RechercherWord() { int ligne=0; int nbrDoccurence=0; if (TxtARechercher->text().isEmpty()) //recupère "TxtARechercher" depuis un QLineEdit { return; // Arrêt de la méthode } if (Patch->text().isEmpty()) { return; // Arrêt de la méthode } QString PatchString; PatchString = Patch->text(); //récupère le chemin du répertoire désiré QDir dir(PatchString); QStringList filters; //filtre filters << "*.txt"; dir.setNameFilters(filters); QStringList fichiers = dir.entryList(filters, QDir::Files); //récupère les fichiers .txt QString RechercheString; RechercheString = TxtARechercher->text(); //Récupère "TxtARechercher" depuis un QLineEdit QString codeOut; QString codeOutFinal; for(int i=0; i < fichiers.size() ;i++) //boucle des elements { nbrDoccurence=0; QFile file(fichiers.at(i)); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return; } QTextStream in(&file); while(!in.atEnd()) { QString line = in.readLine(); //lit une ligne du fichier nbrDoccurence = line.count(RechercheString); //compte le nombre de fois ou on trouve "RechercheString" (c a d le mot à rechercher) ligne++; if(nbrDoccurence>0) codeOut += QString::number(ligne) + " ";//QString::number convertie le int to string } file.close(); } codeRechercher->setPlainText(codeOutFinal); //affiche résultat dans un QTextEdit de mon programme. }
Voili voilu
Partager