C ++如何对齐文件的每一行?

时间:2017-12-20 05:00:48

标签: c++ openmp

我想使用openMP来读取一个包含大量磁盘行的大文件。一种方法似乎使用seekg()函数。但令人头痛的部分是seekg()仅支持将文件索引移动到特定字节。

如果每行的大小完全相同,这可以正常工作。但是如果每条线的大小完全不同,我不知道怎么做。 你能给我一些提示吗?

1 个答案:

答案 0 :(得分:1)

一种可能性:

  • 根据字节将文件划分为相等大小的块,每个并行任务一个,而不考虑行结尾。
  • 让每个任务寻找其块的开头,然后读取并忽略字符,直到找到一行结束,以便它可以在一行的开头处开始处理该文件。 (作为一种特殊情况,从偏移0开始的任务不应该这样做,因为它已经在一行的开头。)
  • 当任务到达其块的末尾(即下一个块开始的字节偏移)时,继续读取该点到当前行的末尾。 (作为一种特殊情况,最后一个块的结尾也是文件的结尾,所以在这一点上没有什么可读的。)

基本上,您最初基于字节偏移选择边界,但是然后将它们向前移动以与行结尾一致。每个任务在其块的开头跳过一些字符,而这些字符由另一个读取前一个块末尾的任务处理。

(我相信这是Hadoop默认情况下拆分基于文本的输入文件的方式,BTW。)