Problème avec type de données et opérateur >> lors de lecture de fichier

[Résolu]
Signaler
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
31 mai 2010
-
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
31 mai 2010
-
Bonjour, j'essaie de décoder un fichier de configuration(txt) j'ai
certain problèmes avec les types de données et l'opérateur >>
(flux de données). 

J'ai un fichier avec le format suivant :

Noeud(string) int int int (nombre de int aléatoire...cetaines fois il n'y en a aucun)
Noeud2(string) int
Noeud3
...etc

J'essaie
de mettre les données recueillies dans des variables et après dans une
structure.  Le problème est le suivant  : Je ne sais jamais si la
prochaine donnée est un int ou un string...alors quand je vérifie par
exemple while(fichierconfig >> nomNoeud) et que la prochaine
donnée est un int...il est incapable de la lire.  N'y a-t-il pas une
façon de le faire continuer à lire les données qu'importe leur format
en utilisant l'opérateur >> (je ne veux pas être obligé de faire
un read et de décortiquer un gros tableau de char si possible...).  Si
ce n'est pas assez clair, voici mon code :

while(fichierConfig >> nomNoeud(string))
{
            while(fichierConfig >> noPatte(int))
            {
                ...Fait des trucs pour mettre les données dans les bonnes variables
            }
}

Il
lit donc le nom du premier noeud et quand il arrive à la fin de la
première rangée de patte, il boucle mais ne réussit pas à mettre le nom
du deuxième noeud dans la variable et le programme se termine
là...quand je met un "while(!eof())" il boucle à l'infini.  Si
quelqu'un est bon avec les fichiers merci de bien vouloir
m'éclairer...ça ne devrait pas être vraiment compliqué à régler comme
problème.  Merci !

2 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Salut,

Si les différents noeuds sont présentés sur des lignes différentes, tu peux procéder de la façon suivante :

#include
#include <fstream>
#include <sstream>

using namespace std ;
int main()
{
    ifstream ifs( "toto.txt" ) ;
    string line ;
    while ( getline( ifs , line ) )
    {
        istringstream iss( line ) ;
        string noeud ;
        int i ;
         iss >> noeud ;
        while ( iss >> i )
        {
              //...
        }
    }
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
31 mai 2010

Hey bin, merci :), ça marche #1, c'est vrai que c'est logique d'utiliser une stringstream, disons que je n'ai pas souvent utiliser cet outil alors je n'y pense pas toujours.  Je le saurai donc à l'avenir, merci beaucoup !