C++ 使用正则表达式从文件中读取数据信息

C++ 使用正则表达式从文件中读取数据信息,c++,file,objective-c++,C++,File,Objective C++,我想创建一个名为FileManager的类,用于保存和加载文件(save.ini)中的数据 我将在下面列出我的数据文件格式: property=value; property2=value2; property3=value3; 我想知道如何创建一个在=符号之后读取右边的方法。可能我必须在那里使用正则表达式,但我仍然不知道如何将它们加载到数组或向量中。我尝试使用getline(),但出现了一些问题;D 提前感谢:)您不需要正则表达式,您可以轻松编写自己的解析器 下面的代码解析一行并将值保存在提

我想创建一个名为FileManager的类,用于保存和加载文件(save.ini)中的数据

我将在下面列出我的数据文件格式:

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);