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 :

Fin de texte


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut Fin de texte
    J'ai un fichier texte (2 lignes) comme celui-ci :
    32_BITS CONVERT_LONG 1
    64_BITS CONVERT_INT 2
    Je veux le lire et récupérer 3 données : le nombre de bit, le type et un entier.

    Je fais ceci (le fichier est déjà ouvert):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      int entier1, entier2;
      string chaine1, chaine2,line;
     
      while(!fichier.DataFile.eof()) 
      {
         fichier.DataFile>>chaine1>>chaine2>>entier1;
         cout<<"chaine1 "<<chaine1<<" chaine2 "<<chaine2<<" entier1 "<<entier1<<endl;
      }
      fichier.DataFile.close();
    Le problème est qu'il me lit 2 fois la dernière ligne pourquoi? Et comment faire pour qu'il sorte du "while"?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine1 32_BITS chaine2 CONVERT_LONG entier1 1
    chaine1 64_BITS chaine2 CONVERT_INT entier1 2
    chaine1 64_BITS chaine2 CONVERT_INT entier1 2
    Merci

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    On ne lis jamais sur eof.
    Voir FAQ (?).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si tu n'a que faire de la raison pour laquelle la lecture ne se fait pas, tu peux "simplement" vérifier la validité du flux après lecture sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::string chaine1;
    std::string chaine2;
    int value;
    std::ifstream ifs("fichier.txt");
    while(ifs>>chaine1>>chaine2>>value)
    {
        cout<<"chaine 1 :"<<chaine1
            <<" chaine 2 : "<<chaine2
            << " value : "<<value<<endl;
    }
    Par la suite, il faudra manipuler chaine1 et chaine2 afin d'en extraire les données qui t'intéressent:

    Pour récupérer le nombre de bits sous la forme d'une valeur numérique, tu peux envisager de travailler avec un stringstream:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        int bitnumber;
        std::stringstream ss;
        ss<<chaine1;
        ss>>bitnumber;
        cout<<bitnumber; // juste un affichage ici pour confirmer ;)
    et, pour récupérer le nom du type, tu peux te baser sur le fait qu'il est composé des caractères qui suivent l'underscore '_' de la deuxième chaine.

    Les fonctions membres substr et find de la classe string te viendront bien en aide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        std::string typetouse;
        typetouse=chaine2.substr(chaine2.find('_')+1);
        cout<<" "<<typetouse; // juste un affichage ici pour confirmer ;)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Voir FAQ (?).
    Comment détecter la fin de fichier lors de la lecture ?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut
    Merci pour ces infos.

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

Discussions similaires

  1. [Pmw.ScrolledText] se placer a la fin du texte
    Par airod dans le forum Tkinter
    Réponses: 1
    Dernier message: 03/08/2007, 14h20
  2. Réponses: 3
    Dernier message: 02/05/2007, 17h38
  3. positionner le curseur en fin de texte
    Par mappy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2006, 17h22
  4. [JTextArea] comment mettre le curseur à la fin du texte
    Par romuluslepunk dans le forum Composants
    Réponses: 2
    Dernier message: 12/08/2005, 09h19
  5. [JScrollPane] Lire la fin du texte automatiquement
    Par Mister Nono dans le forum Composants
    Réponses: 3
    Dernier message: 24/11/2004, 14h19

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