【问题标题】:How to take characters in a text file as arguments如何将文本文件中的字符作为参数
【发布时间】:2017-02-03 04:24:07
【问题描述】:

我是 C++ 的新手,我正在尝试弄清楚如何从文本文件中获取参数并在我的程序中使用它们。

所以如果我想在命令中包含一个文本文件whatever.txt,它会使用指定的行作为参数。

如果文本文件看起来像这样:

1 2

我想在我的程序中使用 1 和 2 作为参数。

到目前为止,我所收集到的,我需要类似的东西:

int main (int argc, char const *argv[]) {

开始,但不知道从哪里开始。

我正在尝试弄乱某些东西,但我还是很新,并且在循环之外我还不能用语言做很多事情!

【问题讨论】:

    标签: c++ file text input command


    【解决方案1】:

    没有为您提供可以为您执行此操作的代码(这会破坏学习如何做这些事情的乐趣),我将遵循的步骤是:

    1. 从命令行中取一个参数作为要从中读取信息的文件名。考虑像这样运行您的脚本:
      $ ./myscript whatever.txt
      然后,argv[0]="./myscript"argv[1]="whatever.txt"

    2. 打开文件(也许ifstream 会很好)。

    3. 循环遍历文件的每一行(可能使用getline 将每一行放入一个字符串)
    4. 解析文件的每一行(我见过stringstream 用于从字符串中填充变量)。

    希望这对您有所帮助。

    【讨论】:

      【解决方案2】:
          int main(int argc, char *argv[])
      

      在主函数中检索文件名后,您应该打开每个文件并检索其内容

      示例代码

          int main(int argc, char* argv[])
          {
              for(int i=1; i <= argc; i++) // i=1, assuming files arguments are right after the executable
                 {
                     string fn = argv[i]; //filename
                     cout << fn; 
                     fstream f;
                     f.open(fn);
                     //your logic here
                     f.close();
                 }
           return 0;
           }
      

      https://stackoverflow.com/a/30141375/3323444

      【讨论】:

        【解决方案3】:

        argc 是传入程序的参数数量,argv 是一个字符串数组,其中包含传入参数的名称。

        至少有一个参数传入argv[0],它是程序的名称。

        构建此代码后,在命令提示符下运行它:

        main.exe data.txt
        

        或者只是在你的 main.exe 上拖放文件“data.txt”

        main.exe 是您的程序,data.txt 是包含您要使用的数据的文本文件

        #include<iostream>
        #include<fstream>
        
        
        int main(int argc, char* argv[])
        {
        
            char c;
        
            if(argc < 2)
            {
                std::cout << "No file passed to program!" << std::endl;
                return 1;
            }
        
            std::ifstream in (argv[1] , std::ios::in);
            if(!in)
                std::cout << "Unable to read file: " << argv[1] << std::endl;
        
            while(in >> c)
                std::cout << c << std::endl;
        
            in.close();
        
        
            std::cin.get();
            std::cout << std::endl;
            return 0;
        }
        

        【讨论】:

        • 次要唠叨:argv[0] 不必是程序名称。大多数情况下,它是用于执行程序的命令。这可能包括也可能不包括路径,并且它可能已经或可能没有被别名到使用它来查找程序名称是徒劳的练习的地步。另外,为了给真正的轻量级系统添砖加瓦,argv[0] 可以留空,尽管我相信标准要求它存在。你可能只会在嵌入式系统上看到这个。
        • @user4581301 我知道,但我只是解释了。你可以这样做:argv[0] = "Hello"; 然后 return main(argc, argv); 然后 argv[0] 是字符串 hello。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 2014-03-25
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多