2011-06-14 90 views
-1

我正在尋找一種方法來搜索關鍵字逗號分隔的txt文件,然後替換該確切行上的另一個關鍵字。例如,如果我有一個很大的TXT文件中的以下行:C#:搜索並替換txt行

Help, 0 

我想找到的TXT這條線(通過講述節目尋找的第一個字「幫助」)和0與1取代以表明我已經所以它看起來像一次閱讀:

Help, 1 

感謝

+2

你的[上一個問題](http://stackoverflow.com/questions/6279503/c-searching-for-a-keyword-in-a-txt-file)沒有讓你沿着這條路走得足夠遠嗎?這和以前一樣,但現在你已經引入了輸出。 – 2011-06-14 18:22:15

+0

我已經嘗試讀取該行,將其存儲在數組中,然後使用1而不是0寫入新的txt文件。但是我寧願有一種方法來處理現有文件並在那裏執行替換操作 – hWorld 2011-06-14 18:26:23

+0

爲什麼要寫入一個新的文本文件?如果您的讀取緩衝區關閉,您可以再次寫入同一個文件:S – 2011-06-14 18:40:44

回答

0

如果你想要做的「取代」取代(這意味着你不希望使用另一個,臨時文件)那麼你會用FileStream這樣做。

您有幾個選項,您可以通過文件流Read直到找到您要查找的文本,然後發出Write。請記住,FileStream在字節級別工作,因此您需要考慮字符編碼。 Encoding.GetString將執行轉換。

或者,您可以搜索文本,並記下它的位置。然後你可以打開一個FileStream並且只需要Seek到那個位置。然後你可以發出Write

這可能是最有效的方式,但它確實比天真選項更具挑戰性。隨着幼稚的做法,您:

有沒有第二個文件,但是您受到系統內存容量的限制。如果你知道你總是處理小文件,那麼這可能是一個選擇。否則,您需要閱讀字符編碼和文件流。

這裏還有一個關於這個專題的SO問題(包括示例代碼):Editing a text file in place through C#

1

這通常是一個非常糟糕的主意,試圖在同一個文件覆蓋的數據:如果你的代碼拋出一個異常,你就可以留下部分處理的文件;如果您的搜索目標和替換值具有不同的長度,則必須重新編寫文件的其餘部分。請注意,這些不適用於您的具體情況 - 但最好不要讓它成爲習慣。

我的建議:

  1. 同時打開輸入文件和臨時文件(Path.GetTempFileName
  2. 過程,寫每一行(StreamReader.ReadLine
  3. 如果沒有錯誤完成後,重命名原始文件東西like origFile.old
  4. 將臨時文件重命名爲原始文件名。

如果出現問題,請刪除臨時文件並退出。這樣,在發生錯誤時原始文件保持不變。