2010-09-27 21 views
0

Je travaille sur un programme qui prend en entrée un fichier redirigé. Par exemple, si mon programme s'appelait foo, j'appellerais le programme avec ./foo < input.txt. Les fichiers que je cours dans mon programme sont censés être formatés avec un seul entier sur la première ligne, deux entiers sur la deuxième ligne. Donc, quelque chose commeLecture C++ dans des segments de données spécifiques d'un fichier redirigé vers mon programme

3 
1 8 

Je trouve que certains des fichiers ont des caractères étrangers quoique sur la première ligne que je dois ignorer. Quelque chose comme

3 t 
1 8 

Je lisais dans les données simplement en faisant cin >> var >> var 2 >> var3; mais quand ce t supplémentaire est jeté dans le tout mélange vis de vers le haut. Quelle serait la meilleure façon de contourner ce problème? Y a-t-il un moyen d'après que la première variable dise de sauter le reste de la ligne? Ou devrais-je utiliser la fonction getline, puis en quelque sorte analyser cela? Merci.

+0

pls afficher votre code pour un meilleur diagnostic –

Répondre

1

Si le fichier est de la forme

[number] garbage 
[number] [number] garbage 

et vous savez que les chiffres sont toujours dans la bonne position sur la ligne, puis j'utiliser std::getline() pour lire chaque ligne puis essayez de lire les attendus nombre d'entiers de chaque ligne que vous lisez.

+0

C'est un peu ce que je pensais. Toute recommandation sur la façon d'analyser chaque ligne? – blcArmadillo

+0

@blcArmadillo: Oui; utilisez un 'istringstream', lisez les deux entiers, vérifiez les erreurs et ignorez le reste du contenu du flux. –

1

Oui, la manière évidente serait d'utiliser std::getline pour lire une ligne de texte, utilisez le std::string que vous obtenez de celui initialiser un std::istringstream, lire le nombre d'éléments de cette ligne, et répéter au besoin.