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