在C ++中使用命令行中的参数

时间:2015-10-13 21:40:26

标签: c++ csv argv

我有一个程序,它将两个csv文件和一个签入日期作为输入并呈现一定的输出。因此,我通常以这种方式运行可执行文件,

./my_executable file.csv 2015-10-13

但是我的要求是使用这种方式

my_executable --input1 ./file1.csv --input2 ./file2.csv --date 2015-08-01

我该怎么做?我是否在代码中的某处写了input1,input2和date这两个词。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

我能想到的最简单的方式:

<强> Live On Coliru

#include <string>
#include <vector>
#include <iostream>
#include <iterator>
#include <cassert>

int main(int argc, char *raw_argv[]) {
    using namespace std;

    vector<string> const args { raw_argv+1, raw_argv+argc };

    assert(args.size() < 1 || args[0] == "--input1");
    assert(args.size() < 3 || args[2] == "--input2");

    if (args.size() > 4) {
        std::string const& csv1 = args[1];
        std::string const& csv2 = args[3];

        std::string date = args.size() > 4? args[4] : "(unspecified)";
        std::cout <<  "Arguments received: " << csv1 << ", " << csv2 << " date:" << date << "\n";
    }
}

打印例如。

./test --input1 stuff.csv --input2 other.csv
Arguments received: stuff.csv, other.csv date:(unspecified)

答案 1 :(得分:1)

命令行参数通过main参数计数参数列表参数传递给您的程序:

int main(int argument_count, char * argument_list[]);

第一个参数是参数的数量,包括可执行文件的名称。

第二个参数是一个C风格的字符串数组,一个用于命令行上的每个参数(或单词)。第一项通常是程序的名称。

你总是可以编写一个小程序来测试它:

#include <iostream>
int main(int arg_count, char * arg_list[])
{
  for (unsigned int i = 0; i < arg_count; ++arg_count)
  {
    std::cout << "Argument " << i << ": " << arg_list[i] << std::endl;
  }
  return EXIT_SUCCESS;
}

编辑1:
您的参数将排列为:
参数0:my_executable
参数1: - 输入1
参数2:./ file1.csv
参数3: - 输入2
参数4:./ file2.csv
// ...

如果你想比较这些参数,那么是的,你需要输入“input1”:

//...
std::string arg1 = arg_list[1];
if (arg1 == "--arg1")
{
  //...
}

答案 2 :(得分:0)

答案 3 :(得分:0)

通常当您以这种方式提供参数时,顺序无关紧要,因此您必须能够以任何顺序解析参数。

这是一个可能的解决方案:

new_term = re.sub(r"(?<=[A-z])\-(?=[A-z])", " ", original_term)