我有csv文件输入,其中我读了多行,其中包含与该行相关的多个字段。如何编写一个从csv文件中读取一行文本的循环,然后继续循环直到它到达该行的末尾。这个while循环将嵌套在!infile.eof while循环中。这是我到目前为止所做的,但并不完全正常。
while (getline(infile, currentline))
{
getline(infile, ID, ',');
getline(infile, Name, ';');
Person p = new Person(ID, Name);
}
csv文件中的一行如下所示: 111,詹姆斯; 222,琳达; 333,卢克;
每一行代表一个教室,因此会有多行。
答案 0 :(得分:1)
问题一团糟,但我认为这就是你想要的:
while (std::getline(infile, currentline))
{
std::istringstream iss(currentline);
if (getline(iss, ID, ',') &&
getline(iss, Name, ';') &&
...)
{
Person p = new Person(ID, Name);
...
}
else
...bad person ;-P...
}
答案 1 :(得分:1)
你的while循环似乎已从“infile”中提取一行并将其存储在“currentline”中。在循环内部,您应该从该字符串中创建一个流,并在“currentline”-stream上使用“ID”和“Name”的getlines。否则,就像现在一样,我认为你会失去其他所有的一线。
答案 2 :(得分:1)
试试这个:
while (getline(infile, currentline))
{
std::istringstream line{currentline};
if(getline(line, ID, ',') && getline(line, Name, ';'))
Person p = new Person(ID, Name);
}
这个while循环将嵌套在!infile.eof while循环中。
作为旁注,永远不要迭代while( !infile.eof() )
- 这几乎可以保证是一个错误。输入流具有多个故障条件(eof,读取失败等)。
您应该简单地将流转换为布尔值以进行检查。