2013-07-09 32 views
0

如何檢查包含多行唯一和複製行的多個RichTextbox。我已經想出瞭如何循環訪問richTextboxes並獲取數據,但是我正在努力研究這些邏輯是否是唯一的。如果代碼清晰如泥,我很抱歉。如何檢查包含多行唯一和複製行的多個RichTextbox?

List<string> DistinctItems = new List<string>(); 
List<string> DupilcatedItems = new List<string>(); 
List<string> FirstItemsList = new List<string>(); 
List<string> CompareItemsList = new List<string>(); 
int ElementIndex = 0; 

foreach (RichTextBox c in tableLayoutPanel1.Controls) 
{ 
    if (c.Text != null) 
    { 
     FirstItemsList.Add(c.Text.Replace("\n", Environment.NewLine).ToString()); 

     if (CompareItemsList.Count == 0) 
     { 
      //Have to add the first batch 
      foreach (string str in FirstItemsList) 
      { 
       txtMixerTextBox.AppendText(str); 
       txtDistinctItems.AppendText(str); 
       DistinctItems.Add(str); 
       ElementIndex++; 
      } 

      CompareItemsList.Add(c.Text.Replace("\n", Environment.NewLine).ToString()); 

      if (CompareItemsList.Count() > 0) 
      { 
       //OK we've gone through the first set 
       foreach (string s in CompareItemsList) 
       { 
        if (DistinctItems.Contains(s)) 
        { 
         //It's a duplicate see if it's in the duplicate list 
         if (DupilcatedItems.Contains(s)) 
         { 
          //OK it's in the list we don't have to add it 
          //See if it's in the textbox 
          if (!txtDuplicateItems.Text.Contains(s)) 
          { 
           //OK it's not in the textbox let's add it 
           txtDuplicateItems.AppendText(s); 
          } 
         } 
        } 
        else 
        { 
         //It's not there so add it 
         DupilcatedItems.Add(s); 
         //now see if it's in the Distinct Textbox 
         if (!txtDistinctItems.Text.Contains(s)) 
         { 
          //add it 
          txtDistinctItems.AppendText(s); 
         } 
         txtMixerTextBox.AppendText(s); 
        } 
       } 
      } 
     } 
    } 
} 
+1

你可以重新格式化你的代碼,使它有點可讀嗎? –

回答

0

這是我做過什麼得到的結果我是後。如上所述,通過RichTextbox的循環,我將列表寫入一個文件,將空行刪除(它們來自我沒有模糊的地方),將文件讀入一個新列表,然後從那裏得到不同的列表。我認爲空白行可能會讓我感到困惑,或者可能是因爲我正在循環列表中的字符串(再次),從而給自己帶來了重複。我可能會受到重擊,但它對我有用。

 List<string> SortingList = new List<string>(); 

    using (StreamReader r = new StreamReader("DistinctItemsNoBlankLines.txt")) 
         { 
         string line; 
         while ((line = r.ReadLine()) != null) 
          { 
           SortingList.Add(line); 
          } 

         } 



    List<string>DistinctSortingList = SortingList.Distinct().ToList(); 

     foreach (string str in DistinctSortingList) 
     { 

     int index = 0; 
      while (index < DistinctSortingList.Count() -1) 
      { 
      if (DistinctSortingList[index] == DistinctSortingList[index + 1]) 
       DistinctSortingList.RemoveAt(index); 
      else 
       index++; 
      } 
     } 
     txtDistinctItems.Lines = DistinctSortingList.ToArray(); 
0

使用String.Split。 例如:

foreach (RichTextBox c in tableLayoutPanel1.Controls) 
{ 
    if (!c.Text.IsNullOrWhiteSpace) 
    { 
     string[] lines = c.Text.Split('\n'); 
     string[] uniqueLines = GetUniqueLines(lines);//Some line-uniqueness checking algorithm 
     c.Text = String.Join('\n',uniqueLines) 
    } 
} 
+0

.IsNullOrWhiteSpace僅適用於.Net 4.0或更高版本。對不起,我沒有提到我使用3.5(我的錯誤)。我認爲這可能會做到。 [鏈接] http://stackoverflow.com/questions/47752/remove-duplicates-from-a-listt-in-c-sharp – user1209939

+0

這本來很好預先知道。如果您要從這裏獲得解決方案,請務必將您的問題標記爲重複刪除,或者至少更清楚地說明您是如何得到解決方案的,以便將來閱讀此問題的人可以看到您的問題是如何解決的。 – Pharap

+0

我發佈了問題後發現它。我將努力包括將來使用的.Net版本。感謝您的高舉。由於這是我所問的第一個問題,我對這些細微差別並不十分清楚。我認爲上面的文章中提到的List .Distinct()。ToList()可能對具有相同或類似問題的人有幫助。它還沒有解決我的問題,但似乎是一個好主意。鏈接的答案是指列表不是專門爲RichTextBoxes。其他人可能不利於使用名單(無論出於何種原因)。 – user1209939