2010-06-25 81 views
1

我想使程序在命令行調用是這樣的:C++程序解析參數

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

他們分爲3個部分:

  • myprogram.exe
  • -F或-T和文件或文本
  • -W FILE -P FILE和-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。

+0

我錯過了您的前兩個調用之間的區別。 – 2010-07-19 15:12:03

+0

編輯,謝謝:) – legami 2010-07-20 15:07:11

回答

6

您可以手動解析它們或使用Boost.Program_options

+0

謝謝,我不知道如何使用這種庫,但我會看看。我讀過這對新手來說有點複雜...某個地方很簡單的例子? :) – legami 2010-06-25 11:02:51

2

Analyizing的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

這已經被其他人完成了,所以如果我是你的話,我不會把所有的時間花在它上面。例如,看看Boost的ProgramOptions。

+0

我會這樣做,但我已經讀過,這對新手來說有點複雜... – legami 2010-06-25 10:42:43

2

如果可以,我會使用getopt:它很簡單。它也會處理組合選項(如ls -lt而不是ls -l -t),它也處理帶有參數的選項,它們出現的順序也無關緊要。所有這些使得人們習慣於命令行參數(通常是選項的順序是無關緊要的,除非給出矛盾的選項......)。