Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в boost::program_options парсить обяз.параметр 
V
    Опции темы
EvilsInterrupt
Дата 18.6.2012, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Хочу чтобы у моей консольной тулзы был интерфейс:

tools.exe [options] filename

как обрабатывать опции понял, но вот как сделать обработку параметра без указания какой-
либо опции, в примере выше это filename. Т.е. мне нужно знать как обрабатывать'unlabeled' параметры. Это возможно?

Среди примеров в e:\source\boost_1_49_0\libs\program_options\example\ я не нашел. (
Может кто ткнет в нужную строчку и в сорец?

пример того что хочу получить:
c:>\tools.exe -d -e -o e:\samples\test00.dat

как мне написать обработку ком. страки так чтобы получить этот "e:\samples\test00.dat" ?
PM MAIL WWW ICQ Jabber   Вверх
bsa
Дата 19.6.2012, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



читай внимательно документацию и самоучители. То, что тебе нужно, называется "позиционным параметром" (в терминах boost::program_options): http://www.boost.org/doc/libs/1_49_0/doc/h....html#id2499896

Это сообщение отредактировал(а) bsa - 19.6.2012, 12:28
PM   Вверх
EvilsInterrupt
Дата 19.6.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Проблема была в непонимании терминологии, спасибо за:
Цитата

называется "позиционным параметром" 

PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 25.6.2012, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



bsa, 
А можешь еще подсказать к привести вывод "help"-опции к виду похожему на SYNOPSYS от readelf?
(ссыкла на synopsys от readelf )

У меня пока такое:
Цитата

r:\projects\readpe\bin\Win32-Debug>readpe.exe --help
readpe [ 1.0.0.1 ]
2012 © e-mail: [email protected]

Basic options:
  --help                Produce help message
  --nologo              Suppress copyright message
  --input-file arg      Input file

Common options:
  -a [ --all ]              Equivalent to specifying all common options
  -d [ --dos-header ]       Displays the DOS-Header
  -n [ --nt-headers ]       Displays the NT-Headers
  -s [ --sections ]         Displays the sections headers
  -t [ --section-details ]  Displays the sections details
  -h [ --headers ]          Displays the all the headers, Equivalent to -d -n
                            -s
  -e [ --export ]           Displays the export header
  -i [ --imports ]          Displays the import headers
  -r [ --relocs ]           Displays the relocation tables

как видишь в моем случае '--input-file arg' никаким образом не намекает пользователю что это позиционный аргумент, более того пользователь может не знать термина "позиционный", как я неделю назад.

Куда лучше это сделать на манер readelf :
Цитата

  [-H|--help]
        elffile...


это более наглядней!

Мой код пока такой:

Код

        po::options_description basic("Basic options");
        basic.add_options()
            ("help", "Produce help message")
            ("nologo", "Suppress copyright message")
            ("input-file", po::value<string>(), "Input file")
            ;
//....
        po::positional_options_description inFile;
        inFile.add( "input-file", 1 );
//....
        po::store( po::command_line_parser(argc, argv).
            options(allOptions).positional(inFile).run(), parsedArgs );
        po::notify( parsedArgs );
//....
    if( !parsed.count("input-file") )
    {
        throw ConfigureError( "Invalid \"input-file\" option" );
    }
    inputFile = parsed["input-file"].as<std::string>();


Добавлено через 8 минут и 41 секунду
может быть через hidden опции, но как тогда пользователь узнает что существует возможность задать позиционный аргумент не заглядывая в readme.txt?
PM MAIL WWW ICQ Jabber   Вверх
Randajad
Дата 26.6.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Подниму темку, что-ли...
boost::po принимает uint8_t переменную за символ со всеми вытекающими. Это баг po или нет и нужно использовать uint(16|32)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.