Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment se déplacer sur une ligne dans un fichier ifstream?

2 réponses
Avatar
Kubiak62
Bonjour à tous,

Mon problème est très simple, cependant, je n'arrive pas à le résoudre.

En C++, j'utilise des objets de type ofstream et ifstream afin de lire
et écrire dans des fichiers (de type texte).

L'enregistrement fonctionne parfaitement, je sépare mes données en
passant à la ligne (ofstream fichier << endl;).

Toutefois, lorsque je désire récupérer les données (avec un ifstream),
je ne trouve pas de focntion permettant de passer à la lignbe suivante
dans le fichier.

En effet, la fonction seekp(...,...) permet changer de position dans le
fichier mais en jouant sur des octets (et non des lignes).

Existe-t-il une fonction qui pourrait résoudre mon problème?

Merci d'avance

2 réponses

Avatar
Falk Tannhäuser
Kubiak62 wrote:
En C++, j'utilise des objets de type ofstream et ifstream afin de lire
et écrire dans des fichiers (de type texte).

L'enregistrement fonctionne parfaitement, je sépare mes données en
passant à la ligne (ofstream fichier << endl;).
Petite remarque au passage : 'endl' va non seulement insérer un

caractère 'n' mais aussi appeler 'flush' afin de vider la mémoire
tampon du stream, chose rarement nécessaire (sauf s'il s'agit
par exemple d'un fichier de 'log' dans une appli susceptible de
planter inopinément) mais qui va potentiellement dégrader les
performances. Normalement, "fichier << 'n'" suffit.

Toutefois, lorsque je désire récupérer les données (avec un ifstream),
je ne trouve pas de focntion permettant de passer à la lignbe suivante
dans le fichier.

En effet, la fonction seekp(...,...) permet changer de position dans le
fichier mais en jouant sur des octets (et non des lignes).

Existe-t-il une fonction qui pourrait résoudre mon problème?


Peut-être
input_file.ignore(std::numeric_limits<int>::max(), 'n');
afin d'extraire (et jeter) les caractères à partir de la position
courante jusqu'à la prochaine fin de ligne ?

Sinon, il y a la solution
std::string line;
while(std::getline(input_file, line)) // lire le fichier ligne par ligne
{
std::istringstream input_line(line);
// ... extraire les données de 'input_line', par exemple :
int foo;
double bar;
input_line >> foo >> bar;
// ... traitement des erreurs si nécessaire
}
qui permet de gérer plus facilement les éventuelles erreurs de formatage
dans le fichier d'entrée.

Falk

Avatar
kanze
Kubiak62 wrote in message
news:<406bf1e3$0$5595$...

Mon problème est très simple, cependant, je n'arrive pas à le
résoudre.

En C++, j'utilise des objets de type ofstream et ifstream afin de lire
et écrire dans des fichiers (de type texte).

L'enregistrement fonctionne parfaitement, je sépare mes données en
passant à la ligne (ofstream fichier << endl;).

Toutefois, lorsque je désire récupérer les données (avec un ifstream),
je ne trouve pas de focntion permettant de passer à la lignbe suivante
dans le fichier.

En effet, la fonction seekp(...,...) permet changer de position dans
le fichier mais en jouant sur des octets (et non des lignes).

Existe-t-il une fonction qui pourrait résoudre mon problème?


La solution la plus habituelle consiste à lire le fichier ligne par
ligne, au moyen de getline. Sinon, il y a toujours istream::ignore.

Note que les fichiers C++ n'ont pas vraiment la notion d'enrégistrement,
auquel on peut accéder de façon aléatoire. La convention habituelle,
c'est bien d'utiliser les lignes, mais ça suppose une lecture sérielle,
parce qu'on ne peut pas savoir d'office, sans lire, où se termine un
enrégistrement.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34