 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Kubiak62 Guest
|
Posted: Thu Apr 01, 2004 10:41 am Post subject: Comment se déplacer sur une ligne dans un fichier ifstream? |
|
|
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
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Thu Apr 01, 2004 12:42 pm Post subject: Re: Comment se déplacer sur une ligne dans un fichierifstrea |
|
|
Kubiak62 wrote:
| Quote: | 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.
| Quote: | 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
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
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Apr 02, 2004 7:05 am Post subject: Re: Comment se déplacer sur une ligne dans un fichier ifstr |
|
|
Kubiak62 <kubiak62 (AT) free (DOT) fr> wrote
| Quote: | 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:kanze (AT) gabi-soft (DOT) fr
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
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|