2016-05-28 8 views
4

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

をなり、私たちは42の代わりに4343の代わりに44などのバージョンをアップグレードし、このスクリプトを実行します。自動化するために、私はC#のコードを書いてコードの下に使用しました

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

しかし、それは1つの単語だけを置き換えることができます。ファイル内の2つのテキストを置き換える方法。私の場合、Proxy430は、Proxy440Proxy440に1回のショットでProxy450と置き換える必要があります。

これを行うには?物事は本当に数値的に連続している場合は

答えて

1

正しい順序で置換を呼び出すと、1行で2つの置換を行うことができます。

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

ありがとうございます。それは私に合って、私は同じものを開発しました –

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

問題は、あなたがReplaceメソッドのreturn valueを割り当てないです。置換は、this文字列を変更しません。置換文字列を返します。このような

変更を:

text = text.Replace(oldvale, newvalue); 

ここfiddleです。

+0

OPは、彼が唯一の彼のコードで一つの単語に置き換えることが可能であることを書きました。これから私は、割り当ての欠如は単にタイプミスであると仮定します。 – Kapol

関連する問題