有效地读取csv文件的最后一行
Efficiently read the last row of a csv file
是否有一种有效的C或c++方法来读取CSV文件的最后一行?幼稚的方法包括读入整个文件,然后到末尾。是否有更快的方法可以做到这一点(特别是如果CSV文件很大)?
您可以做的是猜测行长度,然后在文件结束前跳转2-3行并读取剩余的行。您读取的最后一行是最后一行,只要您至少提前读取一行(否则,您仍然以更大的偏移量重新开始)
我张贴了一些示例代码做类似的事情(阅读最后N行)在这个答案(在PHP中,但作为一个说明)
有关各种语言的实现,请参见
- c++: c++最快的方式来读取最后一行文本文件?
- Python:有效地查找文本文件 中的最后一行
- Perl:我如何从Perl文件的末尾读取行?
- c#:获取最后10行非常大的文本文件> 10GB c# PHP:如何读取文本文件的最后5行
- Java:读取最后n行文件
- Ruby:在Ruby中读取文件的最后n行? 如何从NSFileHandle中逐行读取数据?
您可以尝试反向工作。从文件末尾读取一定大小的字节块,并查找换行符。如果该块中没有换行符,则读取前一个块,依此类推。
请注意,如果一行的大小相对于文件的大小很大,这可能会导致更差的性能,因为大多数文件缓存方案都假设有人在文件中向前读取。
可以使用Perl模块File::ReadBackwards
您的问题与在文件中搜索字符串属于同一领域。正如您正确指出的那样,将整个文件读入内存然后搜索字符串并不总是一个好主意。但你总可以做次优选择。内存映射你的文件。然后使用字符串搜索函数从字符串末尾向后搜索换行符
这是一种非常有效的机制,具有最小的内存占用和最佳的磁盘I/o。
用什么读什么上?在Unix系统上,如果需要最后一行,只需输入
即可。tail -n1 file.csv
如果你想在你的c++应用程序中使用这种方法,你可以这样做
system("tail -n1 file.csv")
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 读取最后一行代码算法 - c++ 时出现问题
- 这段代码的最后一行在做什么?
- 我没有得到产量最低的产品.我该如何纠正它?最后一行是最低销售产品的输出.谢谢
- 丢失读入的每一行输入中的最后一个令牌
- 如何只阅读最后一行的开头?
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- Codelite构建仅呈现最后一行的输出
- 以下递归程序的最后一行是如何工作的
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 如何有效地读取C 中的最后一行文件
- 标准输入未读取最后一行
- 特征:将每一行除以最后一行
- cout 用于仅打印最后一行的 2D 字符串矢量
- 如何确定输入文件中的一行是否是最后一行?C++
- 多功能阵列最后一行相同的结果
- 为什么输入文件的最后一行运行两次?
- Fscanf 未从文件的最后一行 (C/C++) 读取预期值
- C++ - 将数字表从文件读取到 2D 数组中(仅存储最后一行)
- 在一行最后一个单词之后立即退出While循环