我有10个文本文件(名为file0.txt到file9.txt),具有任意长度和行数。我需要随机选择一个文件,从该文件中随机访问1-3行,处理它们并重复,直到所有文件的所有行都被处理完毕。这只需要做一次。为了这个问题,让我们说“过程”意味着打印线条。有没有人对如何在不将所有文本文件加载到内存中的情况下提出任何建议?
答案 0 :(得分:3)
在文本文件中没有任何方法可以“随机访问”(在某种意义上你可以随机访问矢量)行,因为查找行的唯一方法是线性搜索文件以获取换行符。这意味着即使您没有将它们完全加载到内存中,您至少也需要一次流式传输文件来访问行。
你可以通过遍历所有文件一次来计算它们所描述的行数来计算它们中的行数,然后再次通过它们以拉出随机选择的行。我不确定那会带来什么好处。你真正想要实现的是什么?
答案 1 :(得分:2)
您可以扫描文件一到索引行开始的位置,并将其保留在内存中(如果需要多次执行同一个文件,甚至可以保留)。 一旦你有了这个,你就可以直接进入行开始,直到处理之前将它读到newline / eof。
答案 2 :(得分:0)
建议:
1 /制作文件的副本 2 /读取时删除一行 3 /更新文件中的行数 这样你随机选择一条存在且尚未读取的行。
很多读/写......效率不高