Je souhaite analyser plusieurs arguments de ligne de commande en utilisant boost :: program_options. Cependant, certains arguments sont des chaînes entre guillemets. Voilà ce que j'ai -boost :: program_options - analyse de plusieurs arguments de ligne de commande où certains sont des chaînes, y compris des espaces et des caractères
void processCommands(int argc, char *argv[]) {
std::vector<std::string> createOptions;
boost::program_options::options_description desc("Allowed options");
desc.add_options()
("create", boost::program_options::value<std::vector<std::string> >(&createOptions)->multitoken(), "create command")
;
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
boost::program_options::notify(vm);
if(vm.count("create") >= 1) {
std::string val1 = createOptions[0];
std::string val2 = createOptions[1];
...
// call some function passing val1, val2.
}
}
cela fonctionne très bien quand je fais
cmdparsing.exe --create arg1 arg2
Mais ne quand je fais
cmdparsing.exe --create "this is arg1" "this is arg2"
de ligne de commande windows. Pour la deuxième option, il est converti en ["this" "is" "arg1" "this" "is" "arg2"]
dans le vecteur createOptions. Ainsi, val1
obtient "this"
et val2
obtient "is"
au lieu de "this is arg1"
et "this is arg2"
respectivement. Comment puis-je utiliser boost :: program_option pour faire fonctionner ce programme?
Cela fonctionne sur Linux. –
La première chose à vérifier est la façon dont le système d'exploitation fournit ces options à votre programme. Si 'cmdparsing.exe --créer c'est arg1' et' cmdparsing.exe --create 'c'est arg1 "' résulter dans le même contenu pour le tableau 'argv', alors vous devez trouver un autre moyen de convaincre votre OS que la partie entre guillemets doit être conservée ensemble. –