Аргументы синтаксического анализа программы на C ++ - PullRequest
1 голос
/ 25 июня 2010

Я хочу, чтобы программа вызывалась из командной строки следующим образом:

myprogram.exe -F/-T FILE/TEXT -W FILE.WAV -P FILE.PHO -A

Они состоят из 3 частей:

  • myprogram.exe
  • -F ИЛИ -T и Файл или текст
  • -W ФАЙЛ -P ФАЙЛ и -A (Как минимум один, до 3, в любом порядке (или нет, если это сложно))

Так может быть:

myprogram.exe -T "Text Text, test text" -A

или:

myprogram.exe -F FILENAME -A

или:

myprogram.exe -F FILENAME -P FILENAME -W FILENAME

и т. Д.

-A - это одна функция (нужен текст или файл) -W записывает WAV-файл с информацией из текста / файла -P делает что-то похожее на -W

Как лучше всегосправиться с этим?Анализируя argv[x] один за другим, и решая с if s?Что-то проще?

Я новичок в программировании и использовании VS2008.

Ответы [ 4 ]

6 голосов
/ 25 июня 2010

Вы можете проанализировать их вручную или использовать Boost.Program_options .

2 голосов
/ 25 июня 2010

Я бы использовал getopt, если вы можете: это достаточно просто. Он также будет обрабатывать комбинированные опции (как в ls -lt вместо ls -l -t), а также обрабатывать опции с аргументами, и порядок их появления также не имеет значения. Все это делает его «стандартным» для людей, используемых для аргументов командной строки (обычно порядок параметров не имеет значения, за исключением случаев, когда задаются противоречивые параметры ...).

2 голосов
/ 25 июня 2010

Анализ argv [x] один за другим

Я бы так и сделал. Может быть, сохранить счетчик текущего элемента ...

unsigned int cur = 0;

if (argc <= 1) {
  .. error 
}

if (!strncmp(argv[cur],"-T",2)) {
  .. process
  ++cur;
}

...

for (;cur < argc;++cur) {
   if (!strncmp(argv[cur],"-F",2)) {
      .. process

   }  
   else if ...
}

Есть несколько разделителей командной строки. Unix имеет getopt, например.

0 голосов
/ 25 июня 2010

это уже сделали другие, поэтому я бы не стал тратить на это все ваше время. Посмотрите на параметры программы Boost, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...