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

4
我正在使用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 应该被一次性替换为 Proxy440, 并且 Proxy440 应该被替换为 Proxy450

如何实现这个功能呢?

4个回答

1
问题在于您没有分配 Replace 方法的返回值。Replace 不会修改此字符串,而是返回替换后的字符串。
请将代码更改为:
text = text.Replace(oldvale, newvalue);

这里有一个fiddle

OP写道他能够用他的代码仅替换一个单词。从这里我可以推断出缺少赋值只是一个打字错误。 - Kapol

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/%';

谢谢。这很适合我,我已经开发了相同的东西。 - Davey_31

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

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

你需要考虑替换的顺序,因为一旦你用Proxy440替换了Proxy430,你就不能再用Proxy450替换Proxy440,因为那也会替换前一次迭代中更新的值。

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接