目录
Implementation detail 2 - Splitting a string at the delimiter
解析简单配置文件 std::getline
本文解释了如何解析类似于 Windows .ini 文件的 name=value 形式的配置文件。该代码从行中删除所有空格并跳过空行和包含注释的行。
配置文件的格式
The code explained in this article can parse both a formatted and unformatted input
# formatted
generates_output=true
file_format=txt
# unformatted
generates_output = false
file_format=doc
实施摘要
下面的代码解析配置文件。在我们成功加载文件后,我们一行一行地读取它。我们从该行中删除所有空格,如果该行为空或包含注释(用“#”表示),则跳过该行。之后,我们在分隔符“=”处拆分字符串“name=value”并打印名称和值。
#include <iostream>
#include <fstream>
#include <algorithm>
int main()
{
// std::ifstream is RAII, i.e. no need to call close
std::ifstream cFile ("config2.txt");
if (cFile.is_open())
{
std::string line;
while(getline(cFile, 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);
auto value = line.substr(delimiterPos + 1);
std::cout << name << " " << value << '\n';
}
}
else {
std::cerr << "Couldn't open config file for reading.\n&