我有一个包含可变长度行的大文件 (~10GB),我想以编程方式转到不同的行号。有没有一种有效的方法来做到这一点?
最佳答案
是的:建立索引。例如,您可以在一侧创建一个文本文件,其中包含各种行号的字节偏移量,如下所示:
line,offset
0,0
10000,48272
20000,93726
等等。然后当你想转到第 13043 行时,只需跳转到偏移量 48272 并跳过另外 3043 个换行符。简单高效。
另一种方法是使您的行长度保持不变。如果它们已经具有相似的长度,那么这会很有效,这样您就不会浪费太多空间。您可以用 \0
字符或空格或其他任何内容填充它们,然后像一个大矩阵一样对文件进行索引(第 N 行在 N*LEN 字节处)。
最后,您可以简单地将行号写在行的开头。然后在文件中进行二进制搜索,跳到换行符,并检查下一行号以了解是向后看还是向前看(甚至猜测多少)。
关于c - Fseek 到行号(具有可变长度的行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25580069/