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

Discussion :

QTextStream et lecture dans un fichier texte

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut QTextStream et lecture dans un fichier texte
    Bonjour,

    Je viens de débuter avec Qt et j'aimerais lire un fichier texte ligne par ligne.
    Jusque là rien de bien sorcier je fais tout comme décrit dans la documentation
    et ça compile.
    Sauf que le programme ne lit que la première ligne du programme et pas la suite.
    Du coup je me demande ce qu'il manque pas une incrémentation mais je n'en ai
    pas vu dans les exemples. Pourriez m'aider à trouver où mon code cloche.

    Merci

    Le bout de code où se trouve l'ouverture et l'utilisation du fichier:
    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
    QFile file("data.txt");
     
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream flux(&file);
        while(! file.atEnd()) {
            QString temp = flux.readLine();
     
            QStringList liste = temp.split(" : ");
            QString nomMachine = liste.at(0);
            QString adresse = liste.at(1);
     
            if(nomMachine == notreCode) {
                pageWeb =new Fenetre2(adresse,this);
                pageWeb->exec();
                control = true;
                break;
            }
        }
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne peux pas te répondre......mais comme tu es débutant je peux te donnez quelque liens qui sont sur le site actuel :

    http://www.developpez.net/forums/d98...ces-debutants/

    http://www.developpez.net/forums/d11...aux-exercices/

    Le premier lien te conduira vers des exercices de programmation, le deuxiémes te conduira à leur réponses...

  3. #3
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour Arkaan et bienvenue sur le forum

    Pas de problème particulier avec ton code, c'est un code classique pour lire un fichier texte.
    Quelques remarques :
    - si ta première ligne contient le bon nom de machine, le break va arrêter ta boucle. Peut être que cela peut expliquer pourquoi tu lis qu'une ligne. Ajoute des qWarning() pour suivre le code
    - perso, j'aime pas trop le break, ça diminue la lecture de ton code : quand on lit la ligne while, on se dit "la boucle parcours la totalité du fichier", on ne sait pas à ce moment là que la boucle peut s'arrêter avant. Ton code fait peut de lignes donc on voit rapidement qu'il y a un break mais sur code plus complexe, on le verrait pas forcement. J'aurai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(!file.atEnd() & !control) {
        ...
        if(nomMachine == notreCode) {
            ...
            control = true;
        }
    }
    - tu écris at(0) et at(1) sans tester avant la taille de la QStringList, pas bonne idée (même si tu sais que ton fichier contient toujours au moins 2 éléments par ligne) :
    QStringList liste = temp.split(" : ");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (liste.size() >= 2) {
        QString nomMachine = liste.at(0);
        QString adresse = liste.at(1);
    Bonne continuation

    @brother2007
    Je comprends pas ton message. Tu es un peu hors sujet, non ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Merci pour vos réponses!

    J'ai fait ce que tu suggérais gbdivers à savoir que j'ai retiré le break et et que j'ai mis une
    vérification sur la taille de la QStringList cependant le problème demeure.

    Avec les qWarning il apparait que le programme ne rentre qu'une fois dans la boucle.
    C'est pourquoi il ne vérifie que la première ligne. Du coup je regarde du côté des la
    condition d'arrêt de la boucle puisque ça semble venir de là.

    Merci encore

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Par défaut
    le
    est bloquant donc si la 1ere ligne match, tu ne passe aux suivantes qu'une fois la fenêtre fermée.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    ok merci pour l'information!

    En fait j'ai réussi en utilisant du C++ "classique".
    Pour ceux qui aurait eu le même problème voilà ma solution elle vaut ce qu'elle vaut
    mais ça marche
    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
     
    ifstream fichier("data.txt");
     
    if(fichier) {
        string ligne;
     
         while(getline(fichier, ligne)){
                QString lignebis = ligne.c_str();
                QStringList liste = lignebis.split(" : ");
                if (liste.size() >= 2) {
                    QString nomMachine = liste.at(0);
                    QString adresse = liste.at(1);
                    if(nomMachine == notreCode) {
                        pageWeb =new Fenetre2(adresse,this);
                        pageWeb->exec();
                        control = true;
                    }
                }
           }
    pour le principe je lit le fichier ligne par ligne en extrayant les lignes sous forme de string
    je les converti en QString ensuite pour les exploiter.

  7. #7
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Euh, c'est le même code avec ifstream, sauf que tu as viré ton break. Si tu voulais que ta boucle continue, tu pouvais virer ton break aussi dans le premier code

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

Discussions similaires

  1. Lecture dans un fichier texte.
    Par tazthedev dans le forum Delphi
    Réponses: 4
    Dernier message: 31/10/2006, 16h07
  2. Réponses: 4
    Dernier message: 23/03/2006, 17h12
  3. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  4. [ASP] Lecture dans un fichier texte
    Par thoomis dans le forum ASP
    Réponses: 3
    Dernier message: 23/11/2005, 15h08
  5. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17

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