Какой-нибудь приличный механизм сравнения/слияния текста для .NET?[закрыто]
Вопрос
Требования:
- бесплатно, желательно с открытым исходным кодом
- реализован на одном из управляемых языков .NET
Гугл нашел вот это:
- Общий многоразовый алгоритм DIFF в кодпроекте
- Алгоритм разности O(ND) для C#
- Библиотека различий/слияний/исправлений для C#/.NET Джошуа Тауберер
РЕДАКТИРОВАТЬ:
Никаких приложений, пожалуйста, только библиотеки.
Решение
Вы можете захватить компонент COM, который использует Google Diff/Patch/Match.Он работает из .NET.
Обновление, 17 октября 2010 г.:А Код Google Diff/Patch/Merge был портирован на C#.Компонент COM по-прежнему работает, но если вы используете .NET, вам захочется использовать порт .NET напрямую.
Другие советы
Я думаю, что «Общий - многоразовый алгоритм сравнения на C#» в Codeproject — лучшее, что вы можете найти в качестве .NET-движка для сравнения/исправления/слияния.Я создал с его помощью проект, и он соответствует моим потребностям в большинстве сценариев.Есть один или два худших сценария, когда алгоритм сделал патч-файл больше, чем нужно.Но в большинстве случаев у меня все работает нормально (текстовые файлы размером >30 МБ).
В настоящее время я тестирую еще один проект Codeproject, который вы можете найти здесь: http://www.codeproject.com/KB/applications/patch.aspxДля исправлений используются некоторые библиотеки DLL от Microsoft, поэтому выглядит интересно.Но эти библиотеки DLL неуправляемы, и этот проект является для них лишь своего рода оболочкой.Но, возможно, это может помочь вам
Редактировать:Только что нашел еще один проект, ДиффПлекс: http://diffplex.codeplex.com/Его сочетание библиотеки различий .NET со средством просмотра различий Silverlight и HTML..Как указано там, DiffPlex — это библиотека, которую CodePlex использует для создания различий файлов.
GitSharp включает механизм сравнения, основанный на различиях Мейерса.Взгляните на демонстрацию, в которой реализована простая программа просмотра различий wpf на основе коллекции Diff.Sections: http://www.eqqon.com/index.php/GitSharp#GitSharp.Demo
Ни один из ответов на данный момент (за исключением, возможно, ссылки на GitSharp) не касается трехстороннего слияния, поэтому, если это кому-то поможет, я недавно портировал реализацию javascript diff3 Тони Гарнока-Джонса (из синхротрон проект, основанный на Hunt and McIlroy 1976) на C#.
Это упрощенный однофайловый порт методов сравнения и трехстороннего слияния, но это стандартный алгоритм, и пока он у меня работает очень хорошо: https://gist.github.com/2633407