Ich modifiziere eine C# -App, um durch eine Reihe von SQL-Dateien zu durchlaufen und einen Ansichtsnamen mit dem entsprechenden Tabellennamen zu ersetzen.Auf der Suche nach einer bestimmten Lösung für C# Regex-Muster SQL-Tabelle
Zum Beispiel sollte eine Ansicht namens "Item" durch eine Tabelle namens "Item_mst" ersetzt werden.
Ich habe eine Zuordnungsdatei, die die App an, welche Tabellen zu ersetzen und sieht wie folgt aus, um zu bestimmen sucht:
VIEWNAME1,TABLENAME1_MST
VIEWNAME2,TABLENAME2_MST
Das Problem ist, es gibt eine Menge von Szenarien zu suchen, ich habe sie beschrieben unten mit einer Beispiel-SQL-Datei.
Select
i.item <<Matches the Item table but is actually the name of the column, no replace
,dbo.item.u_m <<Matches the Item table with DBO., replace
,lot <<Matches the lot table but is actually the name of a column, no replace
,(Select top 1 cost from itemcost) as Cost <<itemcost is a table, replace
,(Select top 1 cost2 from dbo.itemcost) as Cost2 <<matches the itemcost table with dbo., replace
From
dbo.item i <<matches the item table with dbo.,replace
cross join itemlot <<matches the itemlot table, replace
Wie Sie sehen können, gibt es viele verschiedene Szenarien, und ich bin eine harte Zeit, einen regulären Ausdruck zu schreiben/Suchen und Ersetzen-Algorithmus jedes Szenario zuverlässig zu fangen.
Ich bin dbo.tablename und ersetzen diese einfach genug, es ist die verbleibenden Szenarien, mit denen ich Probleme habe. Gibt es irgendwelche REGEX-Experten, die Ideen haben?
ist hier ein Code-Schnipsel:
//Replace all matched views with table names
for (int j = 0; j < viewCount.Count(); j++)
{
//replace for "."
curFileText = curFileText.Replace(".", "XXXPERIODXXX");
curFileText = Regex.Replace(curFileText, "dboXXXPERIODXXX" + ViewTables[0, j] + "XXXPERIODXXX", "dboXXXPERIODXXX" + ViewTables[1, j] + "XXXPERIODXXX", RegexOptions.IgnoreCase);
curFileText = curFileText.Replace("XXXPERIODXXX", ".");
//replace for "newline"
curFileText = curFileText.Replace(System.Environment.NewLine, "XXXNEWLINEXXX");
curFileText = Regex.Replace(curFileText, ViewTables[0, j] + "XXXNEWLINEXXX", ViewTables[1, j] + "XXXNEWLINEXXX", RegexOptions.IgnoreCase);
curFileText = curFileText.Replace("XXXNEWLINEXXX", System.Environment.NewLine);
//Fix .column_mst spots
curFileText = curFileText.Replace("dbo.", "XXXDBODOTXXX");
curFileText = curFileText.Replace(".", "XXXDOTXXX");
curFileText = Regex.Replace(curFileText, "XXXDOTXXX" + ViewTables[1, j], "XXXDOTXXX" + ViewTables[0, j], RegexOptions.IgnoreCase);
curFileText = curFileText.Replace("XXXDOTXXX", ".");
curFileText = curFileText.Replace("XXXDBODOTXXX", "dbo.");
//replace for " "
curFileText = curFileText.Replace(" ", "XXXSPACEXXX");
curFileText = Regex.Replace(curFileText, "dbo." + ViewTables[0, j] + "XXXSPACEXXX", "dbo." + ViewTables[1, j] + "XXXSPACEXXX", RegexOptions.IgnoreCase);
curFileText = curFileText.Replace("XXXSPACEXXX", " ");
}
Die Beschreibung dessen, was Sie tun möchten, und sein Beispiel sind sehr komplex. Bitte zeigen Sie ein Beispiel für die Eingabe und die gewünschte Ausgabe, damit wir sehen können ** genau ** was Sie wollen. Dann können wir vielleicht die Erklärung interpretieren. Bitte zeigen Sie auch, was Sie bisher versucht haben und erklären Sie, warum es nicht tut, was Sie wollen. Was ist schließlich der Zweck dieses "Code-Snippets"? Wie verhält es sich mit dem Problem? – AdrianHHH