我有一堆存储过程脚本,我存储在一个数组中。每个数组都包含一个过程(即正常的创建过程......)。但是,当传递给数组时,文本中的空格将被替换为数组中的\ t和\ r,而下一行将使用\ n重新复制。我现在想要将每个过程文本分解为单词并存储在数组中。但是分割功能
for (int i = 0; i < text.Length; i++)
{
string[] words = new string[text[i].Split('\t', '\n').Length];
}
上面的数组字但是当我选中时,保持一个空值的字符串。它不会返回它所假设的单词。我想可能是我必须在拆分之前替换\ n \ r \ t,如下所示...... \
text[i].Replace("\n", string.Empty)
以上仍然不起作用。请任何帮助将不胜感激。我想将文本拆分为单词串。下面是整个方法快照。该方法接收值过程名称数组,我希望该方法提取每个给定名称的过程文本,然后将每个存储过程文本拆分为我稍后将使用的单词。我想循环,通过确定在另一个之后跟随哪个单词来执行简单的搜索。
更新
private void text(string[] array)
{
DataSet ds = new DataSet();
string sql = "";
progressBar1.Value = progressBar1.Minimum;
using (SqlCommand command = new SqlCommand())
{
string[] text = new string[array.Length];
string[] name = new string[array.Length];
for (int i = 0; i < array.Length; i++)
{
command.Parameters.Clear();
sql = @"SELECT DISTINCT so.name, so.type,text FROM sys.sysobjects so with (nolock) INNER JOIN sys.syscomments sc with (nolock)
ON so.id=sc.id WHERE name=@name";
command.Connection = getconnection();
command.CommandText = sql;
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@name", array[i].ToString());
using (SqlDataAdapter adp = new SqlDataAdapter(command))
{
ds = new DataSet();
adp.Fill(ds);
}
if (ds.Tables[0].Rows.Count > 0)
{
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
text[i] = ds.Tables[0].Rows[0]["text"].ToString();
name[i] = ds.Tables[0].Rows[0]["name"].ToString();
}
}
double e = (Convert.ToDouble(i) / Convert.ToDouble(array.Length));
progressBar1.Value = Convert.ToInt16(e * 100);
}
int count = 0 ;
for (int i = 0; i < text.Length; i++)
{
text[i].Replace("\n", string.Empty);
string[] words = new string[text[i].Split(new string[] { "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries).Length];
for(int j = 0; j < words.Length ; j++)
{
// words[j] = text[i].Split(new string { " " }, StringSplitOptions.None);// = words[j].;
words[j] = words[j];
}
}
}
}
答案 0 :(得分:1)
为了删除split语句中的空条目,请考虑以下重写...
string[] words = new string[text[i].Split(new string[] { "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries ).Length];
祝你好运!
答案 1 :(得分:0)
您的字符串数组中充满了空字符串,因为您从不为其分配任何字符串。您正在运行正确的Split
语句,对结果进行计数,然后将其丢弃而不将其保存在任何位置。
这一行:
string[] words = new string[text[i].Split('\t', '\n').Length];
与这两者完全相同:
int length = text[i].Split('\t', '\n').Length;
string[] words = new string[length];
当您明确使用string[] s = new string[...]
创建数组时,您不会为数组提供数据,而只是提供大小。如果要将数据放入数组,则需要单独进行。
在这种情况下,使用new
是多余的 - string.Split
已经创建并填充一个新数组并将其返回,您可以按如下方式将其分配给新变量:
string[] words = text[i].Split('\t', '\n');