Не получается удалить строки в c# при парсинге
У меня есть код который из основного файл разбивает текст на 3 других (Для сотрудников трекеров и приоритетов) и очищает от ненужных символов
проблема в том что при очистке у меня появляются не полные строки по типу:
Консультация АПРИКОТ КАПИТАЛ
А полная строка выглядит так:
Ошибка САЙТ ДиБ СИСТЕМС опечатка на сайте опечатка на сайте
(Строки которые сформировались не правильно я хочу удалить )
Вот часть когда где это происходит(Часть для трекеров):
private void ProcessTrackerFile(string filePath)
{
string[] lines = File.ReadAllLines(filePath);
var updatedLines = new List<string>();
var taskCountPerTracker = new Dictionary<string, int>();
foreach (string line in lines)
{
string[] fields = Regex.Split(line, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
if (fields.Length >= 7)
{
string trackerId = fields[5].Trim();
if (TrackerDictionary.ContainsKey(trackerId))
{
string trackerName = TrackerDictionary[trackerId];
fields[5] = trackerName;
fields[0] = fields[5];
fields[5] = "";
fields[4] = "";
if (taskCountPerTracker.ContainsKey(trackerName))
{
taskCountPerTracker[trackerName]++;
}
else
{
taskCountPerTracker[trackerName] = 1;
}
}
}
string updatedLine = string.Join(",", fields).Trim();
updatedLines = updatedLines.Select(line => line.TrimEnd()).ToList();
updatedLines.Add(updatedLine);
}
var random = new Random();
updatedLines = updatedLines.OrderBy(x => random.Next()).ToList();
string newFilePathT = Path.Combine(Path.GetDirectoryName(filePath), "Tracker_task_" + Path.GetFileName(filePath));
File.WriteAllLines(newFilePathT, updatedLines);
string content = CleanContent(File.ReadAllText(newFilePathT));
foreach (var trackerName in TrackerDictionary.Values)
{
string regexPattern = @"\b" + Regex.Escape(trackerName) + @"\b";
content = Regex.Replace(content, regexPattern, "\r\n" + trackerName + "\t");
}
bool shouldWriteLine = !ShouldSkipLine(content);
if (shouldWriteLine)
{
File.WriteAllText(newFilePathT, content);
}
// Чтение файла заново, удаление пустых строк и запись обновленного содержимого обратно в файл
string[] updatedContentLines = content.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
File.WriteAllLines(newFilePathT, updatedContentLines);
//Удаление пробелов в конце строк и после таба
string[] finalLines = File.ReadAllLines(newFilePathT);
for (int i = 0; i < finalLines.Length; i++)
{
finalLines[i] = finalLines[i].TrimEnd();
finalLines[i] = Regex.Replace(finalLines[i], @"\t\s+", "\t");
}
File.WriteAllLines(newFilePathT, finalLines);
if (taskCountPerTracker.Any())
{
var firstValue = taskCountPerTracker.First().Value;
tasksCountContent.AppendLine($"class_weights = {{ ");
foreach (var entry in taskCountPerTracker)
{
double calculatedValue = (100.0 / ((entry.Value * 100.0) / firstValue));
tasksCountContent.AppendLine($" \"{entry.Key}\": {calculatedValue.ToString("F2", CultureInfo.InvariantCulture)},");
}
tasksCountContent.AppendLine($"}}");
File.WriteAllText(tasksCountFilePath, tasksCountContent.ToString());
}
else
{
Console.WriteLine("Словарь taskCountPerTracker пуст. Невозможно вычислить firstValue.");
}
}
private string CleanContent(string content)
{
content = content.Trim();
content = Regex.Replace(content, "<.*?>|</.*?>", " ").Trim();
content = Regex.Replace(content, @"(https?:\/\/(?:www\.)?[a-zA-Z0-9]{2,}(?:\.[a-zA-Z0-9]{2,})+(?:\/[a-zA-Z0-9]{2,})?)", " ").Trim();
content = Regex.Replace(content, @"[^a-zA-Z0-9а-яА-Я\r\n\s]", " ").Trim();
content = Regex.Replace(content, @"\b[a-zA-Zа-яА-Я0-9]\b", " ").Trim();
// Удаление ненужных слов
string[] wordsToRemove = { "Добрый день", "Коллеги", "Прошу", "Спасибо", "Доброе утро", "Добрый вечер", "Здравствуйте", "прилагаю", "скриншот", "картинку" };
foreach (var word in wordsToRemove)
{
content = content.Replace(word, " ").Trim();
}
// Удаление остатков html сокращений
content = content.Replace(" ", " ").Replace(""", " ").Replace("<", " ").Replace(">", " ").Trim();
// Замена 2 и более пробелов на 1 пробел
content = Regex.Replace(content, @"\s+", " ").Trim();
return content;
}
bool ShouldSkipLine(string line)
{
// Паттерн для строки с текстом, за которым следует табуляция, а затем только заглавные буквы
string pattern = @"^(Ошибка|Разработка|Консультация)\t[^\t]+\t[А-Я\s]+$";
return Regex.IsMatch(line, pattern);
}