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

C++ Discussion :

classe parseur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut classe parseur
    Bonjour,

    J'ai un petit problème pour parser un fichier.
    Je crée une classe Parseur, dans laquelle je met un flux (ifstream), un constructeur, et des petites fonctions qui me permettent de faire ce que je veux.
    Lorsque j'instancie cette classe dans mon programme, je n'arrive plus à avoir le eof (ce qui est embêtant, la lecture s'arrête plus...)

    Voilà des petits bouts de code :
    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
     
    //Parseur.h
    ...
    class Parseur
    {
    public :
    	std::ifstream flux;
    	Parseur (const char * nom);
    	...
    };
     
    //Parseur.cpp
    ...
    Parseur::Parseur(const char * nom){
    	flux.open(nom, ios::in);
    }
    ...
    //PragrammePrincipal.cpp
    ...
    int main(){
    	Parseur parseur1 = Parseur("bidule.truc");
    	string ligne;
    	while (getline(parseur1.flux,ligne))
    	{
    		cout << ligne << '\n';
    		getline(parseur1.flux,ligne);
    		while (ligne != "finbloc")
    		{
             cout << ligne << '\n';
    			...
          }
    ....
    Donc, ça continue à m'afficher sans fin la dernière ligne, comme si il bouclait dessus.
    Quand je met tout dans le même fichier, sans classe, là j'ai bien la fin du fichier qui est reconnue...
    A votre avis, d'où peut venir le problème?

  2. #2
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    Pourquoi tu n'utilise pas la methode getline directement sur ton flux ?

    parceque dans ton exemple je vois pas tres bien d'ou vient la function getLine que tu utilises. Et si ca se trouve ton fichier que tu parses contient un espace en trop ou un retour a la ligne qui fausse la boucle d'arret du while.

    XXiemeciel

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Bonjour,

    Merci de m'avoir répondu.
    Pour la fonction getline que j'utilise, c'est celle de la std. Elle prend donc un istream et une string (c'est celle utilisée dans la faq). Quand j'utilise la même méthode sans classe, ça s'arrête bien quand il faut. Avec la classe ça lit bien le fichier, mais ça ne s'arrête plus.
    J'ai vérifié mon fichier, mais il n'y a pas de retour à la ligne ni d'espace en trop. Et apparament le while(getline...) devrait s'arrêter à la fin du fichier (quand il n'y a plus rien à lire), ce qui n'est pas le cas avec la classe.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    J'ai remplacé la fonction getline de la std par celle du flux, mais ça ne reconnait toujours pas la fin du fichier, j'ai du louper un truc quelque part...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Bon.... en fait, c'était le finbloc qui ne passait pas bien... l'opérateur != fonctionnait bien directement dans le main, mais dans la classe, je l'ai remplacé par strcmp, et là ça marche.
    "poin poin poin poinoinoinoin Game over!"......

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par anasama
    Bon.... en fait, c'était le finbloc qui ne passait pas bien... l'opérateur != fonctionnait bien directement dans le main, mais dans la classe, je l'ai remplacé par strcmp, et là ça marche.
    "poin poin poin poinoinoinoin Game over!"......
    Je ne crois pas que le probleme soit resolu tant que tu n'as pas compris pourquoi l'operateur!= ne faisait pas ce que tu voulais dans la classe.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    peut être parce que finbloc contenait un \t et que != ne comparait finbloc que jusqu'au \t (alors que finbloc continuait)?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/09/2014, 22h44
  2. [Python 2.7] Parseur XML et classes : optimisation
    Par darkrojo dans le forum Général Python
    Réponses: 0
    Dernier message: 25/05/2011, 21h56
  3. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. Parseur XML to Java pour creation de Class
    Par yannick101 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 14h20

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