crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Правильный парсинг аргументов командной строки
RazrFalcon
  опции профиля:
сообщение 16.12.2010, 21:44
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Делаю так
QCoreApplication a(argc, argv);
    QStringList arg=a.arguments();
    if (arg[1]=="help" || arg[1]=="--help" || arg[1]=="-h")
...
и так далее

Но если будет help на втором месте то уже ничего работать не будет, и если аргуменов меньше чем у меня прописано (идет до arg[5]), то сразу валится прога, нужно еще один if писать для проверки, в духе if (arg.count()>4).
Как правильно *название темы*?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 16.12.2010, 23:40
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Что-то типа
std::map<QString, QStringList> roPossibleComands;
roPossibleComands[0] = QStringList() << "-h" << "--help" << "help";
const int nNumArgs = arg.count();
for (nArg = 0; nArg < nNumArgs; ++nArg)
{
   for (std::map<QString, QStringList>::const_iterator it = roPossibleComands.begin(); it != roPossibleComands.end(); ++it)
   {
      if (it->second.find(arg[nArg]))
      {
            foo(it->first);
            break;
      }
   }
}


void foo(int whatShallWeDo)
{
switch (whatShallWeDo)
{
   case 0: //print help
   return;
   //etc
}
}

Если у QStringList нет методов поиска (я не помню), заменить на std::set<QString> например. Это то что пришло сразу в голову не задумываясь.... А вообще я думаю стоит посмотреть на исходники любой консольной линуксовой программки и глянуть как там сделано.

Сообщение отредактировал Rocky - 16.12.2010, 23:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 4:56