IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Problème dans une fonction qui recherche un mot dans un fichier texte


Sujet :

Qt

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème dans une fonction qui recherche un mot dans un fichier texte
    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:

    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.
    }
    J'ai simplifié le code pour afficher que les grandes lignes.
    Voili voilu

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour Mythique et bienvenue sur developpez.com

    A mon avis, il y a surement un probleme lors de l´ ouverture du fichier. Mets un qDebug() << filename; avant ton open(). Il faut peut être récupérer le chemin complet avec la fonction absolutePath().

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'ai enfin trouvé la solution en faite la réponse de gbdivers ma fait un "déclic" (quand j'ai lu absolutePath() ) j'ai fait une énorme erreur... j'ai tout simplement oublié le chemin d'accès aux fichiers.

    La solution est ici, il suffit pour ma part de le rajouter de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QString fichierTemp = dir.absolutePath() + "/" + fichiers.at(i);
    Et d'envoyer tout sa à open() et le tour est joué...
    En tout cas merci beaucoup pour l'aide et l'accueil!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/12/2013, 22h17
  2. [Toutes versions] Probleme dans une regle de recherche de mots dans un texte
    Par userjf2007 dans le forum Excel
    Réponses: 3
    Dernier message: 17/01/2012, 15h47
  3. [GD] Problème avec des fonctions qui créent des éléments dans une image.
    Par magnus2229 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/07/2011, 09h38
  4. probleme dans une fonction qui affiche le nombre de ligne du texte
    Par étoile de mer dans le forum Débuter
    Réponses: 7
    Dernier message: 19/09/2008, 08h25
  5. probléme dans une fonction qui retourne un data reader
    Par saraenim dans le forum Windows Forms
    Réponses: 32
    Dernier message: 28/04/2008, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo