Я использую этот код. проблема в том, что он выделяет красным места, которые представляют собой один и тот же текст.
единственная разница может заключаться в обрезке пробелов. но текст тот же, поэтому его не следует окрашивать в красный цвет.
идея состоит в том, чтобы сравнивать текстовое содержимое, а не форматирование текста.
Я пытался обработать случай, если есть какие-то различия в обрезке/пробелах, но в этих двух строках это пока не работает так, как я хотел:
string line1 = i < lines1.Length ? lines1.TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2.TrimEnd() : string.Empty;
здесь прикреплено изображение, показывающее результаты сравнения.
[img]https://i.sstatic.net /fPDmq56t.jpg[/img]
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FileComparer
{
public partial class Form1 : Form
{
private string file1Path = null; // Path for the first selected file
private string file2Path = null; // Path for the second selected file
public Form1()
{
InitializeComponent();
}
private void btnSelectFile1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the First File",
Filter = "All Files|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file1Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 1 Selected: {file1Path}\n");
}
}
private void btnSelectFile2_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the Second File",
Filter = "All Files|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file2Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 2 Selected: {file2Path}\n");
}
}
private async void btnCompareFiles_Click(object sender, EventArgs e)
{
if (file1Path == null || file2Path == null)
{
MessageBox.Show("Please select two files to compare.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
rtbLogger.AppendText($"Comparing Files:\n{file1Path}\n{file2Path}\n");
string content1 = await ReadFileAsync(file1Path);
string content2 = await ReadFileAsync(file2Path);
CompareAndHighlight(content1, content2);
rtbLogger.AppendText($"Comparison Completed: {DateTime.Now}\n--------------------\n");
}
private async Task ReadFileAsync(string filePath)
{
return await Task.Run(() => File.ReadAllText(filePath));
}
private void CompareAndHighlight(string content1, string content2)
{
rtbFile1.Clear();
rtbFile2.Clear();
rtbFile1.Text = content1;
rtbFile2.Text = content2;
string[] lines1 = content1.Split('\n');
string[] lines2 = content2.Split('\n');
int maxLines = Math.Max(lines1.Length, lines2.Length);
for (int i = 0; i < maxLines; i++)
{
string line1 = i < lines1.Length ? lines1.TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2.TrimEnd() : string.Empty;
if (!string.Equals(line1, line2, StringComparison.Ordinal))
{
HighlightDifference(rtbFile1, line1, i);
HighlightDifference(rtbFile2, line2, i);
}
}
}
private void HighlightDifference(RichTextBox rtb, string line, int lineNumber)
{
int start = rtb.GetFirstCharIndexFromLine(lineNumber);
int length = line.Length;
if (start >= 0 && length > 0)
{
rtb.Select(start, length);
rtb.SelectionBackColor = System.Drawing.Color.Red;
rtb.DeselectAll();
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ntent-text
Как сравнить текст содержимого двух файлов? ⇐ C#
Место общения программистов C#
-
Anonymous
1736099425
Anonymous
Я использую этот код. проблема в том, что он выделяет красным места, которые представляют собой один и тот же текст.
единственная разница может заключаться в обрезке пробелов. но текст тот же, поэтому его не следует окрашивать в красный цвет.
идея состоит в том, чтобы сравнивать текстовое содержимое, а не форматирование текста.
Я пытался обработать случай, если есть какие-то различия в обрезке/пробелах, но в этих двух строках это пока не работает так, как я хотел:
string line1 = i < lines1.Length ? lines1[i].TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2[i].TrimEnd() : string.Empty;
здесь прикреплено изображение, показывающее результаты сравнения.
[img]https://i.sstatic.net /fPDmq56t.jpg[/img]
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FileComparer
{
public partial class Form1 : Form
{
private string file1Path = null; // Path for the first selected file
private string file2Path = null; // Path for the second selected file
public Form1()
{
InitializeComponent();
}
private void btnSelectFile1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the First File",
Filter = "All Files|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file1Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 1 Selected: {file1Path}\n");
}
}
private void btnSelectFile2_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Title = "Select the Second File",
Filter = "All Files|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
file2Path = openFileDialog.FileName;
rtbLogger.AppendText($"File 2 Selected: {file2Path}\n");
}
}
private async void btnCompareFiles_Click(object sender, EventArgs e)
{
if (file1Path == null || file2Path == null)
{
MessageBox.Show("Please select two files to compare.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
rtbLogger.AppendText($"Comparing Files:\n{file1Path}\n{file2Path}\n");
string content1 = await ReadFileAsync(file1Path);
string content2 = await ReadFileAsync(file2Path);
CompareAndHighlight(content1, content2);
rtbLogger.AppendText($"Comparison Completed: {DateTime.Now}\n--------------------\n");
}
private async Task ReadFileAsync(string filePath)
{
return await Task.Run(() => File.ReadAllText(filePath));
}
private void CompareAndHighlight(string content1, string content2)
{
rtbFile1.Clear();
rtbFile2.Clear();
rtbFile1.Text = content1;
rtbFile2.Text = content2;
string[] lines1 = content1.Split('\n');
string[] lines2 = content2.Split('\n');
int maxLines = Math.Max(lines1.Length, lines2.Length);
for (int i = 0; i < maxLines; i++)
{
string line1 = i < lines1.Length ? lines1[i].TrimEnd() : string.Empty;
string line2 = i < lines2.Length ? lines2[i].TrimEnd() : string.Empty;
if (!string.Equals(line1, line2, StringComparison.Ordinal))
{
HighlightDifference(rtbFile1, line1, i);
HighlightDifference(rtbFile2, line2, i);
}
}
}
private void HighlightDifference(RichTextBox rtb, string line, int lineNumber)
{
int start = rtb.GetFirstCharIndexFromLine(lineNumber);
int length = line.Length;
if (start >= 0 && length > 0)
{
rtb.Select(start, length);
rtb.SelectionBackColor = System.Drawing.Color.Red;
rtb.DeselectAll();
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79331245/how-to-compare-two-files-content-text[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия