我有一个制表符分隔文件,其中包含8,000,000多行,其中包含一些流氓标签。
例如:
a->b->c->d
a->b->c->-->-->--d
a->b->c->d
a->b->c->d
我有一种方法可以纠正流氓标签(3个标签到1个标签),如下所示:
string text = File.ReadAllText(filePath);
text = text.Replace("\t\t\t", "\t");
File.WriteAllText(filePath, text);
上面的代码块会产生以下错误:
发生了类型为“System.OutOfMemoryException”的未处理异常 在mscorlib.dll中
我如何一次只读取和写入一行,以便整个文件不在内存中?
答案 0 :(得分:1)
http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html为您提供了一个懒惰的IEnumerable<string>
。你可以迭代它,一次只加载一行。
但是,您需要写一个不同于您读取的文件。完成后可以删除/重命名。
这是一个处理文件的单行程序:
File.WriteAllLines(outputFile,
File.ReadLines(inputFile).
Select(t => t.Replace("\t\t\t", "\t"))
);