c++ - 配置文件解析器只返回以前的值

标签 c++ c++11

我有一小段代码,用于读取配置文件,然后根据键查找特定值。我的程序现在看起来像这样:

string readConfigFile(string configKey) {
    cout << "ReadConfigFile\n";
    fstream drConfig("/usr/share/dr_config");
    if(drConfig.is_open()) {
        string line;
        string value;
        while (getline(drConfig, line))
        {
            line.erase(std::remove_if(line.begin(), line.end(), ::isspace), line.end());
            if(line[0] == '#' || line.empty()){
                continue;
            }
            auto delimiterPos = line.find("=");
            auto name = line.substr(0, delimiterPos);
            value = line.substr(delimiterPos + 1);
            // Use this to find a specific string
            if (line.find(configKey) != std::string::npos) {
                cout << value << endl;
            }
        }
        return value;
    } else {
        return "Couldn't open the config file!\n";
    }
}
在我的主要代码中,我称之为:
string num1 = readConfigFile("120");
stringstream geek(num1);
int x = 0;
geek >> x;
cout << "The value of x is " << x << "\n";

string num2 = readConfigFile("100");
stringstream geek(num2);
int y= 0;
geek >> y;
cout << "The value of y is " << y<< "\n";
据说,它应该为我的 int y 打印数字 100。但令人惊讶的是,它打印了我之前的值 120。我认为我的 readConfigFile() 有问题。方法。有人可以指导我完成这个吗?如何获得最新的值 100?

最佳答案

实际上我刚刚找到了应该添加 break; 的答案一旦我已经找到了代码应该如下所示的键:

while (getline(drConfig, line))
    {
        line.erase(std::remove_if(line.begin(), line.end(), ::isspace), line.end());
        if(line[0] == '#' || line.empty()){
            continue;
        }
        auto delimiterPos = line.find("=");
        auto name = line.substr(0, delimiterPos);
        value = line.substr(delimiterPos + 1);
        // Use this to find a specific string
        if (line.find(configKey) != std::string::npos) {
            cout << value << endl;
            break;
        }
    }
    return value;
基本上 break 它停止循环,然后返回我匹配的键值。

关于c++ - 配置文件解析器只返回以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62708470/

相关文章:

c++ - 候选模板被忽略 : substitution failure(error with clang but not g++)

c++ - 在 C++ 中存储表的最佳方法是什么

c++ - 使用 CMAKE 调试和发布库链接 (VISUAL STUDIO)

c++ - B.Stroustrup 新书中的优化与多线程

c++ - 在这种情况下,为什么 void 指针的行为与普通整数指针的行为不同?

c++ - 可变参数模板和 sizeof...() 混淆

C++ 返回函数 lock_guard

C++:为什么我不能使用 Opencv 访问 Node 类?

c++ - 使用 C++ 进行 strtok 拆分时出错

c++ - 实现插件支持的最佳方式