私は、ケースの意志で、私はこの文字列は、テーブルAC#で文字列のキーワードを大文字にします(SQLによるキーワードの美化)?
FROM SELECT *に変換する必要がある文字列
string Query = "Select * fRom TableA"
でこれらのキーワードを大文字にしたいいくつかのキーワード
private static readonly string[] Keywords =
{
"SELECT", "FROM", "WHERE", "GROUP", "HAVING", "ORDER", "LEFT", "RIGHT", JOIN", "INNER", "OUTER", "ASC", "DESC", "AND", "OR","IN", "BETWEEN", "BY", "NOT", "ON", "AS", "CASE", "WHEN", "ELSE"
};
を持っています無視され、キーワードは大文字になります。このため
、私は
public static string GetUppercaseKeyword(string sqlStr)
{
string sqlText = string.Empty;
int foundAt = 0;
foreach (var keyword in Keywords)
{
if (sqlStr.IndexOf(keyword, foundAt, StringComparison.CurrentCultureIgnoreCase) == -1)
{
continue;
}
sqlStr = Replace(sqlStr, keyword, keyword.ToUpper(), StringComparison.OrdinalIgnoreCase);
}
return sqlStr;
}
と置き換える機能機能を書かれている部分文字列は、キーワードで大文字の方法と一致した場合、ここで起こる
public static string Replace(string str, string old, string @new, StringComparison comparison)
{
@new = @new ?? "";
if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(old))
return str;
int foundAt = 0;
while ((foundAt = str.IndexOf(old, foundAt, StringComparison.CurrentCultureIgnoreCase)) != -1)
{
str = str.Remove(foundAt, old.Length).Insert(foundAt, @new);
foundAt += @new.Length;
}
return str;
}
事は、ありさ部分文字列、のように置き換えます。メソッドを使用します。IndexOf
たとえば、select * OrderTableからSELECT * FROM ORDERTABLEが出力されます。
どうすれば問題を解決できますか?
私の他の質問は、それを実装する簡単な方法はありますか?このタイプの目的のための既存のアルゴリズムはありますか?
ここで他のメソッドやクラスを定義するの感嘆符疑問符など –
@rory正規表現では単語境界を正しく検出することができます – CodeCaster
_ "これは簡単に実装できますか?" - どのようにSQLを解析し、それをきれいに印刷するのですか? ([From]、[As]、[On])の値( 'select'、 'table'、 'table')に挿入することで、大文字と小文字を区別するデータベースエンジンに渡されます)。Abanあなたがまだできる限り、この船を着けなさい。 _ウェル_するか、まったくやらないでください。 – CodeCaster