有效地读取csv文件的最后一行

时间:2013-05-26 18:32:44

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

是否有高效的C或C ++方式来读取CSV文件的最后一行?天真的方法包括读取整个文件然后结束。有没有更快的方法可以完成(特别是如果CSV文件很大)?

5 个答案:

答案 0 :(得分:4)

你可以做的是猜测行长,然后在文件结束前跳2-3行并读取剩余的行。您读取的最后一行是最后一行,只要您至少读过一行(否则,您仍然会以较大的偏移重新开始)

我发布了一些示例代码,用于在this answer中执行类似的操作(阅读最后N行)(在PHP中,但作为说明)

有关各种语言的实现,请参阅

答案 1 :(得分:1)

你可以尝试倒退。从文件末尾读取一些大小的字节块,然后查找换行符。如果该块中没有换行符,则读取前一个块,依此类推。

请注意,如果行的大小相对于文件的大小很大,这可能会导致性能下降,因为大多数文件缓存方案都假定有人在文件中向前读取。

答案 2 :(得分:0)

您可以使用Perl模块File::ReadBackwards

答案 3 :(得分:0)

阅读什么和什么?在Unix系统上,如果你想要最后一行,它就像

一样简单
tail -n1 file.csv

如果您希望在C ++应用程序中使用此方法,则可以执行类似

的操作

system(“tail -n1 file.csv”)

如果你想快速而又肮脏的方式来完成这项任务。

答案 4 :(得分:0)

您的问题属于与在文件中搜索字符串相同的域。正如您正确指出的那样,将整个文件读入内存然后搜索您的字符串并不总是一个好主意。但你总能做到最好的事情。内存映射您的文件。然后使用字符串搜索功能从字符串末尾向后搜索换行符。

它是一种极其高效的机制,具有最小的内存占用和最佳的磁盘I / O.