public void ProcessText() { dataList.Clear(); // Очищает список объектов. Number = 0; // Обнуляет счётчик групп. termList.Clear(); // Очищает список всех терминов. groups.Clear(); // Очищает список групп. string pattern = @"\s*#"; // Паттерн для регулярного выражения. string[] lines = Regex.Split(richTextBox1.Text, "\n"); // Каждую строчку в загруженном тексте разбивает на элементы, // превращает в объект типа InfoAboutConnection, // записывает в dataList. // Добавляет термины в termList для дальнейшего подсчёта // количества терминов в группе. for (int i = 0; i < lines.Length - 1; i++) { string[] fields = Regex.Split(lines[i], pattern); // Разделяет строку на элементы. // Если в строке меньше 3 элементов, пропускает. if (fields.Length < 3) { continue; } // Формирует список всех терминов. for (int j = 0; j < 3; j++) { if (j == 0 || j == 2) { fields[j] = fields[j].Replace(" ", ""); termList.Add(fields[j]); } } // Удаляет повторяющиеся элементы в списке. DeleteSame(ref termList); termList.Sort(); InfoAboutConnection info = new InfoAboutConnection(); // Объект с информацией о связи. // Записывает в таблицу и удаляет пробелы. info.Term1 = fields[0].Trim(); info.Connection = fields[1]; info.Term2 = fields[2].Trim(); CheckList(info); info.Number = Number; // Добавляет объект в список. dataList.Add(info); } // Обновляет содержимое таблицы. PutDataToTable(); MakeTermList(); }
// Метод для проверки на наличие связи в существующем списке. private void CheckList(InfoAboutConnection inf) { bool check = false; // Проверяет каждый существующий элемент на наличие связи. for (int i = 0; i < dataList.Count; i++) { if (dataList[i].Term1 == inf.Term1 || dataList[i].Term1 == inf.Term2 || dataList[i].Term2 == inf.Term1 || dataList[i].Term2 == inf.Term2) { check = true; } } if (!check) { // Если не находит, то инкрементирует Number. Number++; } }