我想在C#中創建一個小代碼,它將打開一個.cfg文件並搜索一個單詞,然後用文本替換它,但這不是一切,因爲我已經找到了如何做到這一點,但問題是,我想做一些檢查,如文件中是否包含「Hello」或「Hi」或「blabla」,將其替換爲「Bye」(僅作爲示例)打開一個文件,並找到一些值,並編輯它們
我想用一個簡單的代碼
注意做到這一點:已經用這一個,但它看起來像它的只有一個檢查...
還有一件事是我要去做同樣的事情,但另外2次。
我想在C#中創建一個小代碼,它將打開一個.cfg文件並搜索一個單詞,然後用文本替換它,但這不是一切,因爲我已經找到了如何做到這一點,但問題是,我想做一些檢查,如文件中是否包含「Hello」或「Hi」或「blabla」,將其替換爲「Bye」(僅作爲示例)打開一個文件,並找到一些值,並編輯它們
我想用一個簡單的代碼
注意做到這一點:已經用這一個,但它看起來像它的只有一個檢查...
還有一件事是我要去做同樣的事情,但另外2次。
我無法理解你的問題。你已經被一個詞替換了。只要繼續用你想替換的每個單詞來做這件事。 短語法。
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。
我要檢查多個單詞,如果其中任何一個存在,用「再見」
你可以先拆分輸入字符串轉換成詞,然後用替換它 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);
它看起來像我沒有工作,這裏是我的代碼 'List
它不起作用,因爲「玩家1」由2個單詞組成,而不是1個。 –
所以我該如何讓它工作?因爲這正是我需要的^^ – Shryder
您可以使用正則表達式來執行此操作(您可能需要根據您想要替換的單詞和模式來調整表達式。這個應該適用於你在你的問題中描述的內容)。
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);
我不認爲那個正則表達式是出於性能原因的好方法。 –
@VadimMartynov - 與整個文件內容重新分配四次相比?似乎它可能是相似的。我沒有測試過,所以我不能肯定地說。如果正則表達式太重,可以使用StringBuilder來避免重新分配。 – pstrjds
是的,[StringBuilder將是一個更好的方法](http://stackoverflow.com/questions/1321331/replace-multiple-string-elements-in-c-sharp)隨機大文本。 –
你不能命名變量'var',因爲它是C#中的一個關鍵字,否則你的代碼就OK了,應該可以工作。 –
我完全不明白什麼是問題,你想檢查一些單詞並替換它們,你已經完成了,但是你想檢查它...請說明你的實際目標是什麼... –
如果你正在考慮用相同的替換替換三種不同的字符模式,您可能需要考慮使用正則表達式。對於你正在做的事情來說這可能是矯枉過正的,但是每當我發現我用相同的文本替換多個事物時,我就開始尋找正則表達式來尋求解決方案。如果你將要做多個不同事情的替換,你應該把所有的文本讀入一個'StringBuilder'(取決於你的文件的大小),以節省字符串重新分配,你將遇到覆蓋替換。 – pstrjds