C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Kubiak62
Guest





PostPosted: Thu Apr 01, 2004 10:41 am    Post subject: Comment se déplacer sur une ligne dans un fichier ifstream? Reply with quote



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





PostPosted: Thu Apr 01, 2004 12:42 pm    Post subject: Re: Comment se déplacer sur une ligne dans un fichierifstrea Reply with quote



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





PostPosted: Fri Apr 02, 2004 7:05 am    Post subject: Re: Comment se déplacer sur une ligne dans un fichier ifstr Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.