使用c ++解析文件后分配变量

时间:2013-10-06 19:57:38

标签: c++ parsing args

我正在寻找一些指导或帮助我在C ++中遇到的这个特殊障碍。我来自python背景,所以有些事情让我感到困惑。我正在将一个文本文件作为命令行参数,并尝试解析/分配变量到我在文本中读到的内容。我做了一个超级简单的文本文件,我认为它是一个超级简单的cpp文件。我的确是基于一些其他建议写的,类似于我在这里看到的问题。

在python中,我可以为.readlines()函数实现一个快速的正则表达式排序并快速分配变量,我知道在CPP中它不会那么容易,所以我得到的是:

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    if (argv > 1) 
    {
        std::ifstream s(argv[1]);
        if (s.is_open())
            ; // compiler complained unless this was on its own line
        {
            int i, j, k; // assign ints, no idea why
            s >> i >> j >> k; // 
            std::cout << i << endl;
            std::cout << j << endl;
            std::cout << k << endl;

            // repeat the same with chars, try to assign from file reads?

        }
    }
}

我的文本文件只有:

5
3
1

我期待看到我的节目输出     “5 \ n 3 \ n 1”

没有发生。我最终要做的是有一个目标线,如:     “卡车500” 并查找“Truck”,但将int truck变量分配给“500”

如果我的问题到处都是,我很抱歉,但也欢迎任何有关正确方向的帮助或参考。谢谢!

1 个答案:

答案 0 :(得分:3)

首先,if - 语句后面的分号是if语句的完整条件块(它绝对可以继续前一行,但几乎可以肯定你不会这样做)想要首先使用分号)。此外,始终需要在阅读后检查输入!该流不知道您接下来将尝试什么,并且无法预测它是否会在实际尝试之前成功。也就是说,您的代码应如下所示:

std::ifstream in(argv[1]);
if (!in) {
    std::cout << "ERROR: failed to open '" << argv[1] << "' for reading\n";
}
else {
    int i, j, k;
    if (std::cin >> i >> j >> k) {
        std::cout << "read i=" << i << " j=" << j << " k=" << k << '\n';
    }
    else {
        std::cout << "ERROR: there was a format error\n";
    }
}

那就是说,基于你的代码,你应该看到预期的输出,假设你确实设法正确地打开了文件。我猜想上面的代码会指出出了什么问题。