【发布时间】:2023-04-08 00:33:01
【问题描述】:
我有一个非常大的文本文件,超过 1GB,我有一个表示行号的整数列表,需要在新文件中生成另一个包含原始文件行号文本的文件。
原始大文件示例:
ogfile line 1
some text here
another line
blah blah
所以当我得到一个“2,4,4,1”列表时,输出文件应该是:
some text here
blah blah
blah blah
ogfile line 1
我试过了
string lineString = File.ReadLines(filename).Skip(lineNumList[i]-1).Take(1).First();
但这需要很长时间,因为必须读入文件,跳到有问题的行,然后下一次重新读取......我们正在谈论 1GB 文件中的数百万行,而我的 List<int> 是数以千计的行号。
是否有更好/更快的方法来阅读单行,或者让读者跳到特定的行号而不逐行“跳过”?
【问题讨论】:
-
读取文件一次,然后从该数组中获取您想要的行
-
我会说只是将整个内容读入内存 (
File.ReadAllLines()) 并按索引抓取 -
我需要大量 RAM 才能将整个文件存储到内存中。如果文件是 10GB 怎么办?
-
停止使用文本文件作为数据库,开始使用数据库作为数据库.
-
但这就是说:你对这份名单有什么了解吗?例如,您是否知道它将有许多“重复”(例如您的“4、4”场景),或者几乎没有任何重复?您是否大致知道将提取原始行的哪一部分?您似乎暗示它约为 0.1%;那准确吗?等等。构建可扩展的解决方案通常需要利用输入的已知特征。
标签: c# file filereader streamreader