C ++ lecture dans des segments spécifiques de données à partir d'un fichier redirigé vers mon programme
Question
Je travaille sur un programme qui prend un fichier redirigée en entrée. Par exemple, si mon programme a été appelé foo je qualifierais le programme avec ./foo < input.txt
. Les fichiers que je suis en cours d'exécution à travers mon programme sont censés être mis en forme avec un seul entier sur la première ligne, deux entiers sur la deuxième ligne. Donc, quelque chose comme
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? Est-il possible après que je cin la première variable lui dire de sauter le reste de la ligne? Ou devrais-je utiliser la fonction getline
puis analyser en quelque sorte que? Merci.
La solution
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 le nombre attendu d'entiers de chaque ligne que vous lisez.
Autres conseils
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.