2013-11-27 66 views
1

我有一堆存儲在數組中的存儲過程腳本。每個數組都包含一個過程(即正常的創建過程......)。無論如何,當傳遞給數組時,文本中的空格將被替換爲數組中的\ t和\ r,並且下一行將被替換爲\ n。我現在想要將每個過程文本分解爲單詞並存儲在一個數組中。然而分割功能c#中的string.Replace()和string.Split()#

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 [email protected]"; 
        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]; 
        } 
       } 

      } 
     } 

回答

1

爲了刪除空條目分割聲明,請考慮以下重寫......

string[] words = new string[text[i].Split(new string[] { "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries ).Length]; 

祝您好運!

+0

它返回空數組值...它分割文本並返回空字符串。數組單詞[]假設保存拆分詞。 –

+0

你能提供一個更大的代碼快照以更好地理解你在找什麼嗎? – gpmurthy

+0

請參閱上面的更新 –

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'); 
+0

好吧,先生,如何將他們傳遞給數組字呢? –

+0

我答案中的最後一行代碼就是你想要的。 –