如何读取分隔文件的最后一行

时间:2013-09-08 07:32:10

标签: c++

我有一个带分号分隔符的分隔文件。 我使用以下代码来读取最后一行。我相信循环运行到最后一行并保持覆盖lastLine字符串。因此,一旦到达最后一行,循环就会中断,字符串就是最后一行。

while(getline(finlocal, chuy, ';'))
{
       getline(finlocal,lastLine, ';');
}

cout<<lastLine; //last line.

但是这种方法不能正常有效地工作。 有关如何知道此分隔文件的最后一行的任何建议。

3 个答案:

答案 0 :(得分:5)

你没有解释你的问题但是我猜它没有检查每一行,因为循环内的getline()指向下一个元素,所以你失去了一半的元素。

while(getline(finlocal, chuy, ';'))
{

}
std::cout<<chuy;

应该有效

让我们说这是你的界限:

1 .; &LT; -

2;

3;

4;

...

在第一次迭代后,它转到:

1 .; &LT; -

2 .; &lt; - (暂时)

3 .; &lt; - (在getline内部)

4;

...

所以你失去了第二个元素。循环继续,最后

5 .; &lt; - (通过内循环)

端.; &lt; - (by while):这将右边的行分配给chuy并指向下一个元素

不存在因此getline()内部不起作用

答案 1 :(得分:0)

如果文件不是很大,您可以首先将整个文件放在一个字符串中,然后使用string::find_last_of查找分号的最后一个索引。然后打印从该索引到文件末尾的行。

答案 2 :(得分:0)

使用

while(getline(finlocal, lastLine, ';'));
cout<<lastLine;

或者你可能不会得到最后一行。

你可以使用

    while(getline(finlocal, lastLine, ';'))
    {
       getline(finlocal,lastLine, ';');
    }
    cout<<lastLine;

但两次getline

没有意义

为了在你的情况下更好的分隔符,我会使用一个特殊的符号,比如do:

char delimiter = 251;

char是平方根的标志,很可能不会在聊天中使用。仍然,对于到达的每个聊天消息,您需要检查该标志是否在那里使用,如果是,则删除它。现在,对于您发送的每条消息,请使用其末尾的标记发送,并在接收时,使用getline将该字符拆分。

这样你就可以在一个你知道用户不会搞砸的地方轻松分开。