Bonjour,
Dans un programme, je lit un fichier de parametres dans lequel sont places plusieurs tags qui me servent a reconnaitre ou se trouve mes differents paramatres. Je ne veux pas imposer d'ordre dans le fichier de parametres, certains parametres sont optionels et j'utilise /# #/ pour commenter certaines parties du fichier.
J'ai donc realise une fonction qui prend en entree une variable ifstream et une chaine de caractere correspondant a un tag recherche. Dans cette fonction je lit le flux (en sautant les parties commentees) jusqu'a trouver le tag ou arriver a la fin du flux si le tag (optionel) n'est pas present.
Mon probleme est qu'en sortie de la fonction mon objet ifstream se retrouve a null dans le cas ou le tag recherche n'etait pas presente et donc ou le flux a ete lu jusqu'a eof.
Comment peut on lire un flux sans perdre l'objet ifstream afin de le relire ensuite ?
Ci dessous le code ne ma fonction :
Voila, j'espere avoir ete clair. Je n'ai pas trouve ailleurs d'infos qui m'aurrait debloque et j'espere que quelqu'un pourra me proposer une solution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 void FindTag(istream & fic, char* tag) { string buff; buff.erase(); /* remise au debut du fichier */ fic.seekg(0, ios::beg); while ( std::getline( fic, buff ) ) { /* saut de commentaire */ if(!buff.find("/#",0)) { while(std::getline( fic, buff )) if(!buff.find("#/",0)) break; } else if(!buff.find(tag,0)) break; } } Utitisation : int main(void) { ...... ifstream fichier; fichier.open("nomfic.txt",ios::in); /* Recherche permier tag */ FindTag(fichier,"<premier tag>"); !!!! Pb si premier tag n'est pas trouve alors fichier = 0 /* Recherche deuxieme tag */ FindTag(fichier,"<deuxieme tag>"); ...... }
Merci
LB
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]
Partager