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 : 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>");
......
}
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]