Salut,

J'aimerais réaliser une fonction qui, à partir d'un string passé en parametre, réalise les opérations suivantes :
- Récupère la sous_chaine entre les mots "SI" et "ALORS" de la chaine
- Dans cette sous_chaine, sépare tout les mots avec comme séparateur le string "ET" et récupère chaque sous_sous_chaine dans un tableau de string
- Pour chaque string du tableau extrait les 2 string séparés par un opérateur (typiquement := ou > ou <).

En gros, à partir de cette chaine:

SI mot1:=valeur1 et mot2>valeur2 Alors mot3<Valeur3

J'obtients
1/ "mot1:=valeur1 et mot2>valeur2"
2/ "mot1:=valeur1";"mot2>valeur2"
3/ "mot1";":=";"valeur1"
"mot2";">";"valeur2"

Voila mon code:
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
 
void parsecond(string LigneAParser){
      string cond;
      // Mettre en majuscule
      transform(LigneAParser.begin(), LigneAParser.end(), LigneAParser.begin(), 
                               static_cast<int (*)(int)>(toupper));
 
      // Parse la LigneAParser entre le "si" et le "alors"
      size_t deb = LigneAParser.find("SI",0)+3;
      cout<<deb;
      getchar();
      size_t fin = LigneAParser.find("ALORS")-3;
      cout<<"\n"<<fin;
      getchar();
      cond = LigneAParser.substr(deb,fin);
      cout<<cond<<endl;
 
      // Parse les "et" dans la sous chaine récupérée
      int k=0;
      string tab[10];
      size_t sep;
      while(cond.find("ET")==true){
         sep = cond.find("ET");
         cout<<sep<<"huhu"<<endl;
         getchar();
         tab[k] = cond.substr(0,sep-1);
         cout<<"Iteration :"<<k<<" "<<tab[k]<<endl;
         getchar();
         cout<<cond<<"haha"<<endl;
         cond.erase(0,sep+3);
         cout<<cond<<"hihi"<<endl;
         getchar();
         if(k==9) break;
	     k++;
      }
}
mais je n'arrive pas à séparer les mots autour de ET.
J'ai vu dans la FAQ des choses concernant boost::tokenizer
Quelqu'un peut il m'éclairer plus sur cette méthode et me dire si ca pourrait convenir à mon problème ?

Merci beaucoup à tous

Oti$