Правильный парсинг аргументов командной строки |
Здравствуйте, гость ( Вход | Регистрация )
Правильный парсинг аргументов командной строки |
RazrFalcon |
16.12.2010, 21:44
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Делаю так
Но если будет help на втором месте то уже ничего работать не будет, и если аргуменов меньше чем у меня прописано (идет до arg[5]), то сразу валится прога, нужно еще один if писать для проверки, в духе if (arg.count()>4). Как правильно *название темы*? |
|
|
Rocky |
16.12.2010, 23:24
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Ну как бы я бы сделал так. Создал словарь команд (например тот же std::map). Ключ - интуитивно понятное слово либо идентификатор. Потом тупо цикл по входым аргументам. Взял 1-й пришедший элемент - нашел/не нашел его в словаре. Если нашел - выполняю "сценарий" для него. Если нет - перешел к следующему входному параметру.
|
|
|
RazrFalcon |
16.12.2010, 23:28
Сообщение
#3
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
что то типа:
? |
|
|
Rocky |
16.12.2010, 23:40
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Что-то типа
Если у QStringList нет методов поиска (я не помню), заменить на std::set<QString> например. Это то что пришло сразу в голову не задумываясь.... А вообще я думаю стоит посмотреть на исходники любой консольной линуксовой программки и глянуть как там сделано. Сообщение отредактировал Rocky - 16.12.2010, 23:42 |
|
|
Kagami |
16.12.2010, 23:40
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
|
|
|
maint |
17.12.2010, 5:42
Сообщение
#6
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
есть такая штучка getopt называется. Сишники ей сто лет уже пользуются для разборки командной строки. Она свободна
|
|
|
Kagami |
17.12.2010, 16:37
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Можно и getopt использовать, но гораздо удобнее использовать QxtCommandOptions, который умеет работать с QString.
P.S. QxtCommandOptions из libqxt никуда не делся, просто из документации почему-то его убрали |
|
|
Litkevich Yuriy |
17.12.2010, 18:44
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
ну или ручками
Пример из действующей программы
|
|
|
Текстовая версия | Сейчас: 21.12.2024, 19:23 |