文字列を読み取り、いくつかの定数に応じて分割する動的検索関数を作成したいと考えています。
私のサンプル コードは、検索文字列に対してのみ機能し、そのさまざまなバリエーションに対しては機能しません。
// String to clean
searchString = "month == Jan || (name == “ni*” && age > 18)";
const string ageStr = "age";
const string monthStr = "month == ";
const string nameStr = "name == ";
const string startQutation = "“";
const string endQutation = "”";
const string star = "*";
string month = searchString.Substring(searchString.IndexOf(monthStr) + 9, 3);
searchString = searchString.Remove(searchString.IndexOf(monthStr), 12);
string nameOrginal = searchString.Substring(searchString.IndexOf(startQutation) + 1,
searchString.IndexOf(endQutation) - searchString.IndexOf("“") - 1);
string name = nameOrginal;
if (name.Contains("*"))
{
name = name.Remove(name.IndexOf(star), 1);
}
searchString = searchString.Remove(searchString.IndexOf(nameStr), 8 + nameOrginal.Length + 2);
string ageCompare = searchString.Substring(searchString.IndexOf(ageStr) + 6, 2);
ageCompare = ageCompare.Trim();
string age = searchString.Substring(searchString.IndexOf(ageStr) + 8, 2);
MessageBox.Show(string.Format("Name: {0}\nMonth: {1}\nAge:{2}\nAge compare operator:{3}",
name, month, age, ageCompare));
結果は次のようになります: month = "jan" name = "ni" age = 18 ageCompare = ">"
定数の後の文字列をクリアするより良い関数が必要なので、文字列がハードコードされた文字列と異なっていても問題ありません。
よろしくお願いします