在我的场景中,我需要使用 CSV 创建一个参数文件。每行表示一个配置数据,该行的第一个字段被视为标题,用作标识符。像下面这样的 CSV 格式对我来说很容易解析:
1,field1,field2,field3,field4 // 1 indicated the TARGET that the other fields will be writted to.
1,field1,field2,field3,field4
2,field1,field2,field3,field4
2,field1,field2,field3,field4........
但这对用户不友好。所以,我定义了一个 csv 文件,如下所示:
HeaderLine_Begin,1
field1,field2,field3,field4
field1,field2,field3,field4
HeaderLine_Begin,2
field1,field2,field3,field4
field1,field2,field3,field4
意思是,每一行都是数据将由HeaderLine_Begin写入目标。我只是将ID与真实数据分开。然后,我创建一个这样的结构:
enum myenum
{
ON,OFF,NOCHANGE
};
struct Setting
{
int TargetID;
string field1;
string field2;
myenum field3;
myenum field4;
};
我知道如何编写一些代码来逐行读取 csv,如下所示
filename +=".csv";
std::ifstream file(filename.c_str());
std::string line;
while ( file.good() )
{
getline ( file, line, '\n' ); // read a line until last
if(line.compare(0,1,"#") == 0) // ignore the comment line
continue;
ParseLine();// DONE.Parse the line if it's header row OR data row
}
file.close(); // close file
我想要做的是创建一个类似 vetor 设置的列表来保留数据。流程应该是,比如,找到第一个 headerID1,然后找到下一行。如果下一行是数据线,则将其视为数据线属于headerID1。如果下一行是另一个 headerID,则再次循环。
问题是,在我找到 headerRow 之后,没有这样的 std::getnextline(int lineIndex) 供我获取行。