2011-02-07 157 views
-2

我有一个文本文件,它几乎是有时5 MB大。我需要做的是编写一个函数Finds Start和End Mark,可以有很多这样的标记。并申请更换到找到的词是标记之间用一些随机字符串,并返回保存到文件 例如, 假设我有以下字符串,C#文件内容替换

{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

请发布您迄今为止编写的代码。人们通常不喜欢只为你写代码。事实上,这是一个工作描述,而不是一个问题。 – 2011-02-07 05:24:09

+1

如果您更改语法以使用这些xml标记语法(即<>而不是{}),那将更容易。 – xandy 2011-02-07 05:24:53

+1

求职求职! – 2011-02-07 05:30:43

回答

0

一个相对容易的选择,这取决于许多线程怎么可能是从不同的文件中同时阅读未必是最好的解决办法,就是阅读整个文件INT o内存中的字符串,然后使用Regex查找所有{one}部分的位置。

使用正则表达式匹配:: ::指数和正则表达式匹配:: :: length属性,你可以找到的开始和结束和你匹配的部分。循环遍历所有匹配项,使用这两个属性来生成新的文本字符串,该字符串既可以作为循环写入新文件,也可以写入最后。

如果您不想将整个文件加载到一个字符串,你必须有一个读取流和写入到一个新的文件流。在查找您的{one}(开始)标签的同时,一次阅读文件部分。然后用你的新字符串替换它后面的所有内容,直到找到结尾的{/ 1}标签。完成所有操作后,删除旧文件,然后将新文件重命名为旧文件的文件名。

反正只是一对夫妇的解决方案。为了更好地回答您的问题,我必须看看您的项目需要什么。

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