如何在C ++中检测文件流中的行尾

时间:2014-05-20 08:12:38

标签: c++ csv stream getline file-io

我有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,卢克;

每一行代表一个教室,因此会有多行。

3 个答案:

答案 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,读取失败等)。

您应该简单地将流转换为布尔值以进行检查。