2013-02-12 3 views
0

Я ищу сравнение двух файлов аналогично тому, как вы можете сравнить версию кода в источнике, например, с обновленной версией. Я все еще немного медленный кодер: -S. Моя проблема здесь заключается в том, чтобы правильно ее исправить, поэтому, пожалуйста, входите и расскажите мне, как это будет работать лучше всего и, надеюсь, не будет слишком сложным.Сравнение содержимого двух файлов с отображением различий

Итак, для этого мой текущий план в основном заключается в загрузке обоих файлов в отдельные текстовые поля (?). Поток читал их обособленно в двух аррайалистов и сравнивал аррессистов друг с другом. И у вас есть дополнительные проверки размера файла и т. Д.

Как я могу циклически перебирать текстовое поле, которое я сравниваю и выделяю, например, красным цветом, где есть различия? Я понятия не имею, как я это сделаю?

Достаточно высокого уровня, я бы прочитал различия в двух массивах (например, элемент 11) и выделил это место/элемент данных текстового поля?

+3

получите WinDiff, и никакая кодировка не потребуется (: .. Кроме того, сама проблема на самом деле довольно сложна и с множеством опций: игнорирование пробелов, игнорирование капитализации, переупорядоченные строки, переупорядоченные слова ... –

ответ

4

Если вы не делаете это как опыт обучения, я предлагаю использовать существующую реализацию ... не изобретать колесо. Эффективное разграничение файлов - это не тривиальное обязательство.

Там в C# порт Google, Diff Match Patch

http://code.google.com/p/google-diff-match-patch/

Вы можете компилировать, что в C# в DLL, а затем использовать DLL из проекта VB.Net.

Даже если ваша цель состоит в том, чтобы учиться, с такой сложной темой, я бы предложил изучить выходную реализацию.

+0

Оба отличных ответа – Jonny

2

Вам не нужно отображать содержимое файлов, чтобы их можно было сравнить. Вы можете использовать методы из класса System.IO.File читать содержание и запрос Linq для их сравнения:

Вот простой и короткий подход:

Dim f1Lines = System.IO.File.ReadLines(file1Path) 
Dim f2Lines = System.IO.File.ReadLines(file1Path) 
Dim inFile1Only = f1Lines.Except(f2Lines) 
Dim inFile2Only = f2Lines.Except(f1Lines) 
Dim sameInBoth = f1Lines.Intersect(f2Lines) 

Вы могли бы показать результаты в различных текстовых полей. Вы можете использовать

TxtSame.Lines = sameInBoth.ToArray() 

назначить строки в TextBox.

+2

Как насчет линейного заказа? – Neolisk

Смежные вопросы