C ++程序解析参数

时间:2010-06-25 10:06:09

标签: c++ parsing

我想从命令行调用一个程序,如下所示:

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

它们分为3部分:

  • myprogram.exe
  • -F OR -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来决定?更容易吗?

编程和使用VS2008。

4 个答案:

答案 0 :(得分:6)

您可以手动解析它们或使用Boost.Program_options

答案 1 :(得分:2)

  
    

逐个分析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

答案 2 :(得分:2)

如果可以,我会使用getopt:这很简单。它也会处理组合选项(例如ls -lt而不是ls -l -t),它也会处理带参数的选项,它们出现的顺序也无关紧要。所有这些使得它对于习惯于命令行参数的人来说是“标准的”(通常,选项的顺序是无关紧要的,除非给出相互矛盾的选项......)。

答案 3 :(得分:0)

这已经是其他人所做的,所以如果我是你,我不会把所有时间花在它上面。 以Boost的ProgramOptions为例。