Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > smart compare for files


Автор: sol78 6.11.2008, 14:39
Я ищу что вроде smart compare for HTML files. 
Чтобы сравнивал содержание файлов и выдавал разницу?
Может кто то уже встречал что то подобное?

Смысл этого  в том что что я не хочу получать некоторые различия между файлами, поэтому  byte compare не подходит.

Автор: codelord 7.11.2008, 10:06
А по какой логике надо сравнивать? 
например на вскидку ручками так: 
Удаляем html теги из сравниваемых файлов, разбиваем по словам,   засовываем по словам через разделитель 
в vector<  std::string  >, каждый из файлов и говорим std::sort и std::set_difference  
на два эти вектора, получаем разницу. 

Автор: chaos 7.11.2008, 11:59
sol78, можно посмотреть diff из линуха
http://www.gnu.org/software/diffutils/diffutils.html

Автор: sol78 7.11.2008, 16:20
Как это работает сейчас, например сравниваю 2 файла получаю разницу потом использую какою либо
прогу, например wincom, и сама анализирую разницу, например определить линк можно по разному, но он стается один и тот же линк. Поэтому хочется что то более умное.... 
 

Автор: Torsten 7.11.2008, 16:32
Правильно поставленный вопрос, дает 50% правильного ответа.
если считать вопросом :
Цитата(sol78 @  6.11.2008,  14:39 Найти цитируемый пост)
Чтобы сравнивал содержание файлов и выдавал разницу?

то я таких не видел, обычные которые используются в контролях версий итп и самый (на мой взгляд конечно же) удобный araxis тоже этого делать не умеет. Только по тупому, сравнить, определить куда какие строки перенесли, какие добавили и удалили.

Так же предпологаю что таких и нету. 

Автор: skyboy 7.11.2008, 17:07
sol78, вся проблема - в отсутствии ясности.
тебе надо сравнивать именно HTML? Тогда надо сравнивать не только текст, но и структуру. Возможно, строить дерево DOM, некоторые атрибуты игнорировать(class, title), некоторые элементы игнорировать(<hr>, <br>), некоторые элементы приводить к общему виду(&gt; => ">")
тебе надо сравнивать универсально и настраиваемо с исключениями из сравнения? создай к байтовой сравнялке механизм исключений - кормишь пару различий, а механизм определяет - правда ли куски различны, или различия можно игнорировать. можно сделать плагинами и определять условия через регулярные выражения. можно подключать как плагины простые скрипты, которые будут учитывать и окружающий различия текст.
или тебе надо просто программа, которая подобное умеет и просто выбран не тот раздел? тогда так и скажи. если надо с исходниками - ищи на sourceforge.net
тот же http://www.winmerge.org/ имеет механизм исключений(правда, немного другой - там строки, совпадающие с регуляркой, вообще исключаются из сравнения)

Автор: Lazin 7.11.2008, 17:14
c html файлами это будет сложно сделать, для xhtml можно использовать XML DOM parser, а обычный html - очень неоднозначен и сложен для разбора, там к примеру может не быть некоторых закрывающих тэгов smile

Добавлено через 2 минуты и 7 секунд
вообще, если-бы вопрос был бы задан в разделе по python, я бы посоветовал beautiful soup, а какие html парсеры есть для с++ я не знаю smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)