सहित स्ट्रिंग हैं I boost :: program_options का उपयोग करके एकाधिक कमांड लाइन तर्कों को पार्स करना चाहते हैं। हालांकि, कुछ तर्क डबल कोट्स में संलग्न तार हैं।boost :: program_options - एकाधिक कमांड लाइन तर्कों को पार्स करना जहां कुछ रिक्त स्थान और वर्ण
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.
}
}
इस ठीक काम करता है जब मैं
cmdparsing.exe --create arg1 arg2
करते लेकिन काम जब मैं खिड़कियों कमांड लाइन से
cmdparsing.exe --create "this is arg1" "this is arg2"
ऐसा नहीं करता है - यह मैं क्या है। दूसरे विकल्प के लिए, इसे createOptions वेक्टर में ["this" "is" "arg1" "this" "is" "arg2"]
में परिवर्तित कर दिया जाता है। इस प्रकार, val1
"this"
और val2
"is"
"this is arg1"
और "this is arg2"
के बजाय क्रमशः 0 मिलता है।
मैं यह काम करने के लिए boost :: program_option का उपयोग कैसे कर सकता हूं?
यह लिनक्स पर काम करता है। –
जांच करने वाली पहली बात यह है कि ओएस आपके कार्यक्रम में उन विकल्पों को कैसे प्रदान कर रहा है। यदि 'cmdparsing.exe --create यह arg1' और' cmdparsing.exe --create "यह arg1 है" 'परिणाम' argv' सरणी के लिए समान सामग्री में है, तो आपको अपने ओएस को आश्वस्त करने का कोई अन्य तरीका ढूंढना होगा कि उद्धरणों में हिस्सा एक साथ रखा जाना चाहिए। –