我想创建一个名为FileManager的类,该类用于保存和加载文件(save.ini)中的数据
下面,我将数据文件格式设置为
property=value;
property2=value2;
property3=value3;
我想知道如何创建在=号后仅读取右侧的方法。可能我必须在那里使用正则表达式,但仍然不知道如何将它们加载到数组或向量中。我尝试使用getline(),但是出了点问题; D
预先感谢:)
答案 0 :(得分:0)
您不需要正则表达式,可以轻松编写自己的解析器。
以下代码解析一行并将值保存在提供的unordered_map
中:
void parseLine(char * line, std::unordered_map<std::string, std::string> & values)
{
// Find entry name
const char * name = line;
for (char c = *line; c != '='; c = *(++line));
*line = '\0';
// Find entry value
const char * val = line + 1;
for (char c = *line; c != ';'; c = *(++line));
*line = '\0';
// Insert value in map
values.insert(std::pair<std::string, std::string>(name, val));
}
它只是扫描行,直到找到'='
和';'
。请注意,这仅在语法正确的情况下有效(无空格,分号结尾),但我认为这就是您想要的。
然后解析文件:
std::unordered_map<std::string, std::string> values;
FILE * fp = fopen("somefile", "r");
if (fp)
{
char line[128]; // replace with max line length
while (fgets(line, 128, fp))
parseLine(line, values);
}
fclose(fp);
fgets(line, 128, fp)
最多读取文件128
当前行的fp
个字符,并将其保存在缓冲区line
中。当到达EOF时,它返回nullptr
,循环结束。
当然,您可以将其包装在您选择的类中。