如何在c#中替换文件中的多个文本?

时间:2016-05-28 13:03:04

标签: c# winforms

我使用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应该被Proxy440Proxy440替换为Proxy450

如何实现这一目标?

4 个答案:

答案 0 :(得分:1)

问题是您没有指定Replace方法的Webstorm -> Preferences -> Editor -> Inspections 。替换不会修改它返回替换字符串的return value字符串。

像这样改变:

this

这是fiddle

答案 1 :(得分:1)

如果按正确顺序调用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/%';

答案 2 :(得分:0)

如果事情在数字上是顺序的,你可以这样做:

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);

答案 3 :(得分:0)

您可以为此创建自定义方法。

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);