我有一个带分号分隔符的分隔文件。 我使用以下代码来读取最后一行。我相信循环运行到最后一行并保持覆盖lastLine字符串。因此,一旦到达最后一行,循环就会中断,字符串就是最后一行。
while(getline(finlocal, chuy, ';'))
{
getline(finlocal,lastLine, ';');
}
cout<<lastLine; //last line.
但是这种方法不能正常有效地工作。 有关如何知道此分隔文件的最后一行的任何建议。
答案 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
将该字符拆分。
这样你就可以在一个你知道用户不会搞砸的地方轻松分开。