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 回答