Boost::Spirit : espaces dans une chaîne de caractères
Bonjour,
Je me penche actuellement sur la bibliothèque Boost::Spirit. J'avance doucement mais je bute sur un problème : j'ai une chaine de caractères pouvant contenir le texte suivant :
Code:
std::string s = "{Clavier,Azerty, Qwerty}";
Mon objectif est de récupérer chaque valeur est de les placer dans un std::vector. Avec le texte ci-dessus, pas de souci. Par contre, si le texte est le suivant :
Code:
std::string s = "{'Clavier FR',Azerty, Qwerty}";
... je récupère bien les valeurs mais je perds l'espace de la valeur 'Clavier FR' :(
Comment faire ?
Voici le bout de code sur lequel je travaille :
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 40
|
#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#define BOOST_SPIRIT_USE_PHOENIX_V3
using namespace boost::spirit;
template <typename Iterator, typename Skipper>
struct pg_string_array_grammar : qi::grammar<Iterator, std::vector<std::string>(), Skipper>
{
pg_string_array_grammar() : pg_string_array_grammar::base_type{strings_}
{
string_ = *ascii::alnum;
quoted_string_ = "'" >> string_ >> "'";
strings_ = "{" >> ((quoted_string_ | string_ ) % ",") >> "}";
}
qi::rule<Iterator, std::string(), Skipper> string_;
qi::rule<Iterator, std::string(), Skipper> quoted_string_;
qi::rule<Iterator, std::vector<std::string>(), Skipper> strings_;
};
int main()
{
//std::string s1{"{'azerty',toto,titi tata,'qwerty','clavier','clavier us'}"};
std::string s1{"{'azerty', 'clavier fr'}"};
//std::string s1{"{'azerty', 'clavier'}"};
std::vector<std::string> v1;
pg_string_array_grammar<std::string::iterator, qi::space_type> g1;
if (qi::phrase_parse(s1.begin(), s1.end(), g1, qi::space_type(), v1))
{
for (const auto &elem : v1)
std::cout << elem << std::endl;
}
} |
Merci d'avance,
Jean-Michel