3

是否有一种有效的 C 或 C++ 方法来读取 CSV 文件的最后一行?天真的方法涉及读取整个文件,然后走到最后。有没有更快的方法可以做到这一点(特别是如果 CSV 文件很大)?

4

5 回答 5

4

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

我在这个答案中发布了一些用于做类似事情的示例代码(阅读最后 N 行)(在 PHP 中,但用作说明)

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

于 2013-05-26T18:35:40.387 回答
1

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

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

于 2013-05-26T18:36:43.570 回答
0

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

于 2013-05-26T18:38:08.590 回答
0

读什么,读什么?在 Unix 系统上,如果你想要最后一行,它很简单

tail -n1 file.csv

如果您希望在您的 C++ 应用程序中使用这种方法,您可以执行类似的操作

系统(“尾 -n1 文件.csv”)

如果您想要一种快速而肮脏的方式来完成此任务。

于 2013-05-26T18:39:41.897 回答
0

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

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

于 2013-05-26T18:47:53.800 回答