以下是文字:字符串 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命令放在一个字符串数组中。我怎么能接受它?我尝试过split和substring。但那是愚蠢的。我用愚蠢无效的方式做到了。
就是这样:
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", "");
}
这给了我想要的输出。但我现在这是糟糕的编码。我不能以任何简单的方式做到吗?
答案 0 :(得分:1)
您可以使用此正则表达式查找语句,只要您输入的变化不大。
var matches = Regex.Matches(txt, @"^CREATE TABLE .+", RegexOptions.Multiline);
string[] myArray = matches.Cast<Match>().Select(x => x.ToString()).ToArray();
答案 1 :(得分:0)
您可以使用File.ReadLines
来获取这些行,并且很容易在没有正则表达式的情况下过滤掉空行。
var commands = File.ReadLines("filename.txt")
.Where(line => !string.IsNullOrEmpty(line))
.ToArray();
如果create table
以外的文件中还有其他命令,那么您也可以添加一个简单的过滤器。只需在另一个过滤器之后添加以下命令:
.Where(line => line.StartsWith("CREATE TABLE"))