我有一个几乎有时5 MB大的文本文件。我需要做的是编写一个Finds Start和end mark的函数,可以有很多这样的标记。并使用一些随机字符串将替换应用于标记之间的已找到的单词并保存回文件 例如, 假设我有以下字符串,
{one} hellow there {one} this will not be replaced as it is not within marks {two}you again{two}
所以结果内容将是
{one} someRandomText AgainSomeRandomText {one} this will not be replaced as it is not within marks {two} moreRandom againMoreRandom{two}
我如何在C#
中执行此操作答案 0 :(得分:1)
请注意,在您的项目中包含此代码,我可以获得您可能获得的任何利润的10%:
TextReader tr = new System.IO.StreamReader("My5MegFile.txt");
string line;
while((line = tr.ReadLine()) != null)
{
line = line.Replace("oldvalue", "newvalue");
Console.WriteLine(line);
}
// close reader etc...
PS确保您的计算机在运行时有超过5mb的内存:D
答案 1 :(得分:0)
一个相对简单的选项,可能不是最佳解决方案,取决于可以同时从不同文件读取的线程数,是将整个文件读入内存中的字符串,然后使用Regex查找所有{的位置一个}部分。
使用Regex :: Match :: Index和Regex :: Match :: Length属性,您可以找到匹配部分的开头和结尾。循环遍历所有匹配项,使用这两个属性生成新的文本字符串,可以将其作为循环或最后写入新文件。
如果您不想将整个文件加载到字符串中,则必须有一个读取流和一个写入新文件的流。在查找{one}(开始)标记时,一次阅读文件部分。然后用新字符串替换后面的所有内容,直到找到结束{/ one}标记。完成所有操作后,删除旧文件,然后将新文件重命名为旧文件的文件名。
无论如何,只是一些解决方案。为了更好地回答你的问题,我必须看看你的所有项目需要做些什么。