2011-02-07 206 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