C++ 使用正则表达式从文件中读取数据信息
我想创建一个名为FileManager的类,用于保存和加载文件(save.ini)中的数据 我将在下面列出我的数据文件格式:C++ 使用正则表达式从文件中读取数据信息,c++,file,objective-c++,C++,File,Objective C++,我想创建一个名为FileManager的类,用于保存和加载文件(save.ini)中的数据 我将在下面列出我的数据文件格式: property=value; property2=value2; property3=value3; 我想知道如何创建一个在=符号之后读取右边的方法。可能我必须在那里使用正则表达式,但我仍然不知道如何将它们加载到数组或向量中。我尝试使用getline(),但出现了一些问题;D 提前感谢:)您不需要正则表达式,您可以轻松编写自己的解析器 下面的代码解析一行并将值保存在提
property=value;
property2=value2;
property3=value3;
我想知道如何创建一个在=符号之后读取右边的方法。可能我必须在那里使用正则表达式,但我仍然不知道如何将它们加载到数组或向量中。我尝试使用getline(),但出现了一些问题;D
提前感谢:)您不需要正则表达式,您可以轻松编写自己的解析器 下面的代码解析一行并将值保存在提供的
无序映射中
:
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));
}
fgets(第128行,fp)
读取文件当前行fp
的最多128个字符,并将其保存在缓冲区line
。当到达EOF时,它返回nullptr
,循环结束
当然,您可以将其封装在您选择的类中。请显示您尝试过的代码并包含错误消息。同样奇怪的是,它对我来说很好用。你不需要正则表达式——这对于这个任务来说太过分了。读入该行后,只需使用std::string::find
搜索等号,然后使用std::string::substr
提取字符串的尾部。
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);