Ma situation: Je suis novice en Esprit, je dois utiliser VC6 et j'utilise donc Spirit 1.6.4.Comment est-ce que j'analyse correctement ceci avec l'esprit?
J'ai une ligne qui ressemble à ceci:
//The Description;DESCRIPTION;;
Je veux mettre le texte DESCRIPTION
dans une chaîne si la ligne commence par //The Description;
.
J'ai quelque chose qui fonctionne, mais me semble pas élégante:
vector<char> vDescription; // std::string doesn't work due to missing ::clear() in VC6's STL implementation
if(parse(chars,
// Begin grammar
(
as_lower_d["//the description;"]
>> (+~ch_p(';'))[assign(vDescription)]
),
// End grammar
space_p).hit)
{
const string desc(vDescription.begin(), vDescription.end());
}
Je beaucoup plus que d'attribuer tous les caractères imprimables jusqu'à la prochaine ';'
mais ce qui suit ne marchera pas parce que parse(...).hit == false
parse(chars,
// Begin grammar
(
as_lower_d["//the description;"]
>> (+print_p)[assign(vDescription)]
>> ';'
),
// End grammar
space_p).hit)
Comment le faire frapper?
Merci, cela fonctionne aussi et semble encore mieux. J'ai cependant une petite correction: Pour obtenir uniquement l'ouverture et la fermeture du texte _in_between_ confix_p, l'action [assign()] doit être placée derrière print_p et non derrière confix_p(). – foraidt
Ah, vous avez raison.J'ai parcouru la documentation trop vite. Il semble mal au début, mais l'analyseur le corrige pour faire la bonne chose. –