【发布时间】:2015-02-21 22:55:08
【问题描述】:
我编写了一个程序,它将文本文件读入变量,对文本进行正则表达式替换,然后将其写回文件。显然,这对于大型文本文件是不可扩展的;我希望能够逐行读取文本文件并对所需模式进行正则表达式替换。
这是我的不可扩展代码:
static void Main(string[] args) {
var fileContents = System.IO.File.ReadAllText("names.txt");
string pattern = "Ali";
string rep = "Tyson";
Regex rgx = new Regex(pattern);
fileContents = rgx.Replace(fileContents, rep);
System.IO.File.WriteAllText("names.txt", fileContents);}
我知道如何使用 StreamReader 逐行读取文件,但是当我尝试在 StreamReader 中嵌套 StreamWriter 以便在逐行搜索时写入文件时遇到了未处理的异常错误。
有人知道怎么解决吗?
【问题讨论】:
-
必须是
RegEx.Replace你熟悉string.Replace()方法吗?你能不做以下var fileContents = System.IO.File.ReadAllText("names.txt");fileContents = fileContents.Replace("Ali", "Tyson"); -
我希望这不言而喻...您写入的文件与读取的文件不同吗?
-
你是说你想逐行读取一个文件并做一个正则表达式替换内联(修改你正在阅读的同一个流)?如果是这样,请不要这样做。相反,从一个文件读取,将结果写入另一个文件,最后进行文件复制/重命名以覆盖原始文件。
-
有,但您不想这样做,因为如果您犯了错误或遇到错误,您的数据将被永久销毁。如果您想一次性替换大文件中的文本,请咨询Large single-file parse。
-
@StewC,是的,您可以使用
FileStream(msdn.microsoft.com/en-us/library/…),但这并不简单,因为匹配文本的大小不一定与替换的大小匹配文本,这意味着您将在逐行工作时从上到下反复重写文件。最好只使用两个文件,一个用于读取,一个用于写入。
标签: c# regex file-io scalability