假设有一个文本文件,其中包含休耕样式的以下内容:
name: natalie, sarah
surname: parker
age: 24
contry: dubai
我想得到natalie
和sarah
作为名字,parker
作为姓氏等等。在此之后,在我的代码中的某个地方,我需要变量名称,姓氏,年龄(如natalie,sarah,parker,24等)。
我认为,首先我需要读取文件并将其存储在数组中,然后使用分隔符对其进行解析:"(空格)或":"以解析<surname: parker>
这个,并且还使用","逗号作为分隔符以解析<natalie, sarah>
。
我可以将文本存储在数组中或使用 getline(textfile, size) 来获取行,因为我每次只需要一行。你认为哪个最合适?我们如何进行解析?
你离目标很近。我只有一点建议:
- 使用 std::map 存储文件中的数据 使用
- while 循环从文件中获取每一行,使用 split 或 boost::按
:
拆分字符串来获取键和值并将它们存储在 map 中。
使用正则表达式更轻松地求解它。像这样的模式:"name:([\w,]+)surname(\w+)"
我可以想到这样的东西(简化;没有错误检查或优化等;这是未经测试的,但应该可以工作):
std::ifstream file(myfile);
std::string line;
std::map<const std::string, std::string> dataset;
while (file >> line) {
size_t var_start = line.find_first_not_of(" t"); // get beginning of the variable name
size_t var_end = line.find_first_of(":"); // get the end of the variable name
if (var_start == std::string::npos || var_end == std::string::npos) // any not found?
continue; // skip this line
std::string var_name = line.substr(var_start, var_end - var_start); // get the variable name
std::string var_value = line.substr(var_end + 1); // get the variable content
// now do something, e.g. safe it
dataset[var_name] = var_value;
}