我有一小段代码,用于读取配置文件,然后根据密钥查找特定的值。我的程序现在看起来像这样:
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";
据称,它应该为我打印出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;
基本上,中断会停止循环,然后返回键的匹配值。关于c++ - 配置文件解析器仅返回先前的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62708470/