高效读取csv文件的最后一行 有没有一个高效的C或C++方式读取CSV文件的最后一行?幼稚的方法包括读取整个文件,然后进行到底。有没有更快的方法可以做到这一点(特别是当CSV文件很大时)?

高效读取csv文件的最后一行 有没有一个高效的C或C++方式读取CSV文件的最后一行?幼稚的方法包括读取整个文件,然后进行到底。有没有更快的方法可以做到这一点(特别是当CSV文件很大时)?,c++,c,file,csv,file-io,C++,C,File,Csv,File Io,您可以猜测行长度,然后在文件末尾前跳过2-3行,然后读取其余行。您读取的最后一行是最后一行,只要您之前至少读取了一行(否则,您仍然以更大的偏移量重新开始) 我发布了一些示例代码,用于在(PHP中)中执行类似的操作(读取最后N行),但仅作为一个示例) 有关各种语言的实现,请参阅 C++: Python: Perl: C#: PHP: 爪哇: 红宝石: 目标C: 您可以尝试反向工作。从文件末尾读取一些大小的字节块,并查找换行符。如果该块中没有换行符,则读取上一块,依此类推 请注意,如果行的大小相对

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

我发布了一些示例代码,用于在(PHP中)中执行类似的操作(读取最后N行),但仅作为一个示例)

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

  • C++:
  • Python:
  • Perl:
  • C#:
  • PHP:
  • 爪哇:
  • 红宝石:
  • 目标C:

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


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

      您可以使用Perl模块。

      使用什么和在什么上读取?在Unix系统上,如果您想要最后一行,它非常简单

      tail -n1 file.csv
      

      如果你想从C++应用程序中获得这种方法,你可以做一些类似于

      的事情。 (“tail-n1 file.csv”)


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

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


      <>这是一个非常有效的机制,内存占用最少,磁盘I/O.< /P>是最理想的,但我需要一个C++解决方案。看看它做了什么,然后在C++中重新实现它,这不是困难,这是正确的,不幸的是,一些白痴编辑了我的问题,删除了C/C++。我正在寻找一个C/C++解决方案。看起来好像有人把它放回去了。将编辑我的答案以适合。您能否提供有关如何对有问题的文件进行内存映射的更多信息?这是一种我还没有听说过的新方法,因此我有兴趣了解更多细节。使用内存映射文件时,这与将文件读入内存(以片段形式)是一样的,只是运行时库正在这样做,或者操作系统正在这样做。您只添加了“C++”。C标签呢?毕竟,你说“C/C++”和两种语言和不同的函数来读取文件,例如对于C—<代码> FGED<代码>,对于C++ +>代码> STD::GETLION<代码>。一个问题是,可以备份两条文本行或更多。因此,必须读取该文件,直到最后一行文本导致EOF。不能假定下一个文本行是文件的最后一行。:-)诅咒!但是谢谢你的关注…我会找到一个更好的例子!