Je developpe presentement quelque chause de semblable
j'utilise les expression reguliaire pour extraire les donner de mes fichier text l'avantage que j'y trouve est une grande souplesse de lecture et d'extraction
les expression reguliaire permaite d'extraire les valeur d,une chaine de caractere
j'utilise la lib "C" Regex www.linuxinfor.com/french/man3/regex.html
celle ci me retourne la position du 1er et du dernier caractere corespondent a un sous ensemble
Par exemple
tu recherche les ligne commensent par "var" un entier "=" et suivit d'un nombre et tu veut recuperer le nombre
l'experssion reguliaire correspondant pourait etre
^var[0-9]=([0-9]\.[0-9]{0,4})
ou ([0-9]\.[0-9]{0,4}) est la sous chaine
regex retournerait de ton fichier dans un char*
VAR=0.000
puis initialiserait une structure regmatch_t avec lex valeur rm.so=4 et rm.eo=8;
il ne te reste plus qua faire un substr(mr.so,rm.eo) pour la recuperer
ensuite var=0.777
blablable.
ces quand meme unpeut plus complexe que de faire un sinplement un std::Getline() puis tester la ligne retourner mais aven un peut d'imagination ca ofre des posibiliter eppatante
mois j'ai devloppez une classe CData qui defini un data ayant les membre
1 2 3 4 5
|
name//nom du parametre
format//expression reguliaire
value//valeur retourner par l'expression reguliaire
methode//super methode |
ainsi qu,ine classe CSection parent des classe CsubData et CSubExpression
ou CSubData gere une liste de CData et CExpression gere une list d'expression
dans un fichier text je configure mon application
1 2 3 4 5 6 7 8 9 10 11 12
| [TEST]
[DATA]//subsection data;
hit:([0-9])//CData
mass:([9-0]{0,4},[0-9]{0,4})//CData
[/DATA]
[EXPRESSION]//subexpression
GetHit"^hit_number=$(hit);
GETMASS:^mass_(hit)=$(mass);
[/EXPRESSION]
[/TEST] |
ou $(NAME)=a l'expression reguliaire du parametre et _(NAME) a la valeur retourner par l'expression reguliaire
ainsi a lexecution
GetHit executera l,expression regiliaire ^hit_number=([0-9])
retourne en exemple hit_number=8;
place 8 dans le parametre hit;
puis execute l,expression reguliaire ^mass8=([9-0]{0,4},[0-9]{0,4})
retourne en exemple mass8=1234.776[/b]
et place 1234.776dans le parametre mass
ces peut-etre pas tres claire mais si la methode t'interesse on en rediscute
Bonne continuation
Partager