簡體   English   中英

如何在c#中替換文件中的多個文本?

[英]How to replace multiple texts in a file in c#?

我正在使用c#自動化進程。 我的腳本如下所示,

 UPDATE   Table
 SET   param_val = REPLACE(param_val,'Proxy430/','Proxy440/')
 WHERE   param_key = 'PROXY_URL'; 

 UPDATE   Table 
 SET   param_val = REPLACE (param_val, '.420/', '.430/')
 WHERE   param_val LIKE '%.420/%';  

對於每個月,我們將升級版本,如44代替4343代替42並運行此腳本。 為了自動化,我編寫了C#代碼並在代碼下面使用

string text = File.ReadAllText(filePath);
text.Replace(oldvale, newvalue);
File.WriteAllText(filepath, text);

但是,問題是它只能取代一個單詞。 如何替換文件中的兩個文本。 就我而言, Proxy430應更換為Proxy440Proxy440Proxy450在單發射擊。

怎么做到這一點?

問題是您沒有指定Replace方法的return value 替換不會修改this字符串,而是返回替換的字符串。

像這樣改變它:

text = text.Replace(oldvale, newvalue);

這是一個小提琴

如果按正確順序調用replace,則可以在一行中完成兩次替換。

string TestString = @"UPDATE   Table
SET param_val = REPLACE(param_val, 'Proxy430/', 'Proxy440/')
WHERE param_key = 'PROXY_URL';

UPDATE Table
SET param_val = REPLACE(param_val, '.420/', '.430/')
WHERE param_val LIKE '%.420/%'; ";

const string oldFrom = "Proxy430";
const string oldTo = "Proxy440";
const string newFrom = "Proxy440";
const string newTo = "Proxy450";

string result = TestString.Replace(newFrom, newTo).Replace(oldFrom, oldTo);
Console.WriteLine(result);

輸出是:

UPDATE   Table
 SET param_val = REPLACE(param_val, 'Proxy440/', 'Proxy450/')
 WHERE param_key = 'PROXY_URL';

UPDATE Table
 SET param_val = REPLACE(param_val, '.420/', '.430/')
 WHERE param_val LIKE '%.420/%';

如果事情在數字上是順序的,你可以這樣做:

string text = File.ReadAllText(filePath);
for (int i=lowestVersion; i < highestVersion; i++)
{
     var oldValue = i.ToString() + "0";
     var newValue = (i+1).ToString() + "0";
     text.Replace(oldValue , newvalue);
}
File.WriteAllText(filepath, text);

您可以為此創建自定義方法。

private void MultipleReplace(string text, string[] oldValues, string[] newValues)
{
    for (int i = 0; i < old.Length; i++)
    {
        text = text.replace(oldValues[i], newValues[i]);
    }
}

你需要考慮替代的順序,因為一旦你更換Proxy430通過Proxy440 ,你再也不能更換Proxy440通過Proxy450 ,因為這也將替換在上一次迭代更新的值。

例:

string text = File.ReadAllText(filePath);
string[] oldValues = { "Proxy440", "Proxy430" };
string [] newValues = { "Proxy450", "Proxy440" };
MultipleReplace(text, oldValues, newValues);
File.WriteAllText(filepath, text);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM