Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору tezarius Ну, если минимальный кусок равен абзацу (и нумерация абзацев упорядочена), то тогда WinMerge - излишне сложный инструмент. Но посмотреть общую логику их алгоритма нужно обязательно. Цитата: С чего начать? какие функции использовать? | Начать нужно не с поиска функций, а с составления алгоритма. Представьте, что каждый абзац - это строка. Тогда документ представляет из себя список строк. Значит, вам нужно сравнить два списка строк и определить, какие строки были изменены, какие - удалены, и какие добавлены. Если в документе не может быть одинаковых абзацев - задача проста: 1. Каждый абзац старого документа сравниваете с каждым абзацем нового документа. Если они равны, устанавливаете для этих абзацев флаг "равно". 2. Последовательно проходите по абзацам старого документа. Находите подряд идущие абзацы, без флага "равно". Сравниваете их количество с количеством соответствующих абзацев из нового документа. Если количество равно, то каждый из этих абзацев был изменён на соответствующий абзац из нового документа. Если в старом документе количество этих абзацев меньше, чем в новом, значит, часть абзацев была изменена, а часть - удалена. Если больше - значит, часть абзацев была изменена, а часть добавлена. Таким образом, для каждого абзаца из старого документа установлен один из признаков: - равен абзацу из нового документа - изменён в новом документе (и указатель на соответствующиё абзац в новом документе) - удалён в новом документе нужен только один признак: - добавлен И сохраняете в базу данных: для всех абзацев из старого документа, у которых не установлен признак "равен" добавляете записи с указанием признака и: - для удалённых: порядкового номера абзаца в старом документе - для изменённых: порядкового номера абзаца в старом документе и текста соответствующего нового абзаца - для добавленных: порядкового номера абзаца в старом документе, после которого добавляется новый абзац и его текста. Это приблизительно и вкратце. Если в документе может быть несколько одинаковых абзацев - задача сравнения существенно усложнится. |