[ifstream] pb lecture fichier non sequentielle
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 :
Code:
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>");
......
} |
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.
Merci
LB
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]