2016-05-28 10 views
4

Ich automatisiere einen Prozess mit C#. Mein Skript wie unten,Wie ersetzt man mehrere Texte in einer Datei in 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/%'; 

Für jeden Monat aussehen würde, werden wir die Version wie 44 anstelle von 43 und 43 anstelle von 42 aktualisieren und dieses Skript ausführen. Um zu automatisieren, habe ich C# -Code geschrieben und unten Code

verwendet, aber Problem ist es kann nur ein Wort ersetzen. So ersetzen Sie zwei Texte in einer Datei. In meinem Fall, Proxy430 sollte ersetzt werden als Proxy440 und Proxy440 in Proxy450 in Einzelaufnahme.

Wie erreichen?

Antwort

1

Wenn Sie "Ersetzen" in der richtigen Reihenfolge aufrufen, können Sie zwei Ersetzungen in einer einzigen Zeile durchführen.

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

Die Ausgabe lautet:

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

Danke. Es passt mir und ich habe das gleiche entwickelt –

0

Wenn die Dinge wirklich numerisch sequentiell sind, können Sie etwas tun:

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

Sie können eine benutzerdefinierte Methode für diese erstellen.

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

Sie müssen die Reihenfolge der Alternativen betrachten, denn wenn man Proxy430 durch Proxy440 ersetzen, können Sie nicht mehr Proxy440 durch Proxy450 ersetzen, denn das wird auch die Werte in der vorherigen Iteration aktualisiert ersetzen.

Beispiel:

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

Das Problem ist, dass Sie nicht die return value von Ersetzen Methode zuweisen. Ersetzen ändert nicht this string es gibt ersetzte Zeichenfolge zurück.

ändern es wie folgt aus:

text = text.Replace(oldvale, newvalue); 

Hier ist ein fiddle.

+0

OP schrieb, dass er in der Lage ist, ein Wort zu ersetzen, nur mit seinem Code. Ich gehe davon aus, dass die fehlende Zuordnung nur ein Tippfehler ist. – Kapol

Verwandte Themen