1

ここにテキストがあります: 文字列txtはこの値を保持します。

CREATE TABLE table_name1 ( column_name11231 data_type, column_name232 data_type, column_name3 data_type, .... )

CREATE TABLE table_name2 ( column_name1 data_type, column_name2 data_type, column_name3 data_type, .... )

CREATE TABLE table_name3 ( column_name1231 data_type, column_name2 data_type, column_name3 data_type, .... )

CREATE TABLE table_name4 ( column_name1231 data_type, column_name1232 data_type, column_name1233 data_type, .... )

これはサンプルです。テキストファイルから読み込みます。次に、各 CREATE TABLE コマンドを文字列配列で取得したいだけです。どうすればそれを取ることができますか?分割と部分文字列を試しました。しかし、それは愚かでした。私は愚かで効果のない方法でそれをしました。

はい、これ:

string[] totalSp = Regex.Split(txt, "CREATE TABLE");
string[] output = new string[totalSp.Length-1];

for (int i = 1; i < totalSp.Length; i++ )
{
output[i - 1] = "CREATE TABLE " + totalSp[i].Replace("\r\n", "");
}

これにより、目的の出力が得られます。しかし、私は今、これは貧弱なコーディングです。もっと簡単な方法でできませんか?

4

2 に答える 2

1

入力にあまり変化がない限り、この正規表現を使用してステートメントを見つけることができます。

var matches = Regex.Matches(txt, @"^CREATE TABLE .+", RegexOptions.Multiline);
string[] myArray = matches.Cast<Match>().Select(x => x.ToString()).ToArray();
于 2013-03-19T14:46:18.623 に答える
0

を使用File.ReadLinesして行を取得でき、正規表現なしで空の行を簡単に除外できます。

var commands = File.ReadLines("filename.txt")
    .Where(line => !string.IsNullOrEmpty(line))
    .ToArray();

ファイルに他のコマンドがある場合は、create tableそのための単純なフィルターも追加できます。他のフィルターの後に次のコマンドを追加するだけです。

.Where(line => line.StartsWith("CREATE TABLE"))
于 2013-03-19T14:44:42.883 に答える