-3

我有 10 个具有任意长度和行数的文本文件(命名为 file0.txt 到 file9.txt)。我需要随机选择一个文件,从该文件中随机访问 1-3 行,处理它们并重复,直到所有文件的所有行都已处理完毕。这只需要执行一次。为了这个问题,让我们说“过程”意味着打印行。有没有人对我如何在不将所有文本文件加载到内存中的情况下执行此操作有任何建议?

4

3 回答 3

3

实际上没有任何方法可以“随机访问”(从某种意义上说,您可以随机访问向量)文本文件中的行,因为找到这些行的唯一方法是线性搜索文件以查找换行符。这意味着即使您没有将它们完全加载到内存中,您也至少需要流式传输文件一次才能访问行。

您可以通过传递所有文件一次以计算其中的行数然后再次传递它们以拉出随机选择的行来实现您所描述的内容。我不确定这样做有什么好处。你真正想要达到什么目的?

于 2013-10-22T18:27:28.223 回答
2

您可以扫描文件一以索引行开始的位置,并将其保存在内存中(如果您需要多次执行同一个文件,甚至可以保留该文件)。一旦你有了它,你就可以寻找行的开头并在处理之前将其读取到换行符/eof。

于 2013-10-22T18:29:42.200 回答
0

建议:

1/ 制作文件的副本 2/ 读取一行时擦除它 3/ 更新文件中的行数 这样您就可以随机选择一个存在但尚未读取的行。

很多读/写...效率不高

于 2013-10-22T18:32:09.567 回答