2015-12-26 37 views
-2

我想在C#中創建一個小代碼,它將打開一個.cfg文件並搜索一個單詞,然後用文本替換它,但這不是一切,因爲我已經找到了如何做到這一點,但問題是,我想做一些檢查,如文件中是否包含「Hello」或「Hi」或「blabla」,將其替換爲「Bye」(僅作爲示例)打開一個文件,並找到一些值,並編輯它們

我想用一個簡單的代碼

注意做到這一點:已經用這一個,但它看起來像它的只有一個檢查...

​​

還有一件事是我要去做同樣的事情,但另外2次。

+5

你不能命名變量'var',因爲它是C#中的一個關鍵字,否則你的代碼就OK了,應該可以工作。 –

+2

我完全不明白什麼是問題,你想檢查一些單詞並替換它們,你已經完成了,但是你想檢查它...請說明你的實際目標是什麼... –

+0

如果你正在考慮用相同的替換替換三種不同的字符模式,您可能需要考慮使用正則表達式。對於你正在做的事情來說這可能是矯枉過正的,但是每當我發現我用相同的文本替換多個事物時,我就開始尋找正則表達式來尋求解決方案。如果你將要做多個不同事情的替換,你應該把所有的文本讀入一個'StringBuilder'(取決於你的文件的大小),以節省字符串重新分配,你將遇到覆蓋替換。 – pstrjds

回答

0

我無法理解你的問題。你已經被一個詞替換了。只要繼續用你想替換的每個單詞來做這件事。 短語法。

string fileContent = File.ReadAllText("mycfg.cfg"); 
fileContent = fileContent.Replace("Hi", "Bye").Replace("Hello", "Bye").Replace("blabla", "Bye"); 
File.WriteAllText("mycfg.cfg", fileContent); 

執行實際上相同的bou的完整語法不會將中間結果保存在變量中。

string fileContent = File.ReadAllText("mycfg.cfg"); 
fileContent = fileContent.Replace("Hi", "Bye"); 
fileContent = fileContent.Replace("Hello", "Bye"); 
fileContent = fileContent.Replace("blabla", "Bye"); 
File.WriteAllText("mycfg.cfg", fileContent); 

以同樣的方式StringBuilder can be used但它會是隻針對某些情況下,在輸入數據長的長字符串更加有效。如果您不確定或沒有性能問題,最好使用String。

+0

這種方法和正則表達式之間的一個注意事項是,你不能調用'Replace'以不區分大小寫的方式。如果你需要它不區分大小寫,那麼你就不得不採取另一種方法。 – pstrjds

+0

謝謝,它的工作應該是。 – Shryder

0

我要檢查多個單詞,如果其中任何一個存在,用「再見」

你可以先拆分輸入字符串轉換成詞,然後用替換它 LINQ的Select終於String.Join

List<string> wordsToReplace = new List<string> {"Hi", "Hello", "Blabla"}; 
string file = File.ReadAllText("mycfg.cfg"); 

string result = String.Join(" ", file.Split().Select(word => wordsToReplace.Contains(word) ? "Bye" : word)); 

File.WriteAllText("mycfg.cfg", result); 

編輯:

var lines = File.ReadLines("mycfg.cfg"); 

var modified = lines.Select(line => Regex.Replace(line, @"\bplayer\s\d\b", "Bye")); 

File.WriteAllLines("mycfg.cfg", modified); 
+0

它看起來像我沒有工作,這裏是我的代碼 'List wordsToReplace = new List {「player \」1 \「」,「player \」2 \「」,「player \」3 \「」 }; string file = File.ReadAllText(「players/config.cfg」); string result = String.Join(「」,file.Split()。Select(word => wordsToReplace.Contains(word)?「player \」0 \「」:word)); File.WriteAllText(「players/config.cfg」,result);' 和btw,ur代碼使得我的文件沒有中斷,所以一切都寫在一行中,因爲它應該像100行或80-70 ... – Shryder

+0

它不起作用,因爲「玩家1」由2個單詞組成,而不是1個。 –

+0

所以我該如何讓它工作?因爲這正是我需要的^^ – Shryder

0

您可以使用正則表達式來執行此操作(您可能需要根據您想要替換的單詞和模式來調整表達式。這個應該適用於你在你的問題中描述的內容)。

var reg = new Regex(@"\b(hi|hello|blabla)", RegexOptions.IgnoreCase); 
var fileText = File.ReadAllText("mycfg.cfg"); 
fileText = reg.Replace("bye"); 
File.WriteAllText("mycfg.cfg", fileText); 

如果您想要替換其他字符串,則必須調整模式以匹配需要匹配的內容。因此,如果您需要匹配Hi,Hello,blabla和玩家「0」或玩家「1」,請調整您的表情。

var reg = new Regex(@"\b(player ""\d""|Hi|Hello|blabla)", RegexOptions.IgnoreCase); 
var fileText = File.ReadAllText("mycfg.cfg"); 
fileText = reg.Replace("bye"); 
File.WriteAllText("mycfg.cfg", fileText); 
+0

我不認爲那個正則表達式是出於性能原因的好方法。 –

+0

@VadimMartynov - 與整個文件內容重新分配四次相比?似乎它可能是相似的。我沒有測試過,所以我不能肯定地說。如果正則表達式太重,可以使用StringBuilder來避免重新分配。 – pstrjds

+0

是的,[StringBuilder將是一個更好的方法](http://stackoverflow.com/questions/1321331/replace-multiple-string-elements-in-c-sharp)隨機大文本。 –

相關問題