Ответ 1
Microsoft выпустила проект diff на CodePlex, который позволяет вам делать слова, символы и разности строк. Он лицензируется по лицензии Microsoft Public (Ms-PL).
Я хотел бы показать различия между двумя блоками текста. Вместо сравнения строк текста или отдельных символов я хотел бы просто сравнить слова, разделенные указанными символами (например,\n,,,,,). Мое основное соображение для этого состоит в том, что блок текста, который я буду сравнивать в целом, не имеет большого количества разрывов строк в нем, и сравнение букв может быть трудно выполнить.
Я столкнулся с следующей логикой O (ND) в С# для сравнения строк и символов, но я вроде как потеря для того, как изменить его для сравнения слов.
Кроме того, я хотел бы отслеживать разделители между словами и убедиться, что они включены в diff. Поэтому, если место заменено жестким возвратом, я бы хотел, чтобы это появилось как diff.
Я использую Asp.Net(С#) для отображения всего блока текста, включая удаленный исходный текст и добавленный новый текст (оба будут выделены, чтобы показать, что они были удалены/добавлены). Будет оценено решение, которое работает с этими технологиями.
Приветствуются любые советы о том, как это сделать.
Microsoft выпустила проект diff на CodePlex, который позволяет вам делать слова, символы и разности строк. Он лицензируется по лицензии Microsoft Public (Ms-PL).
Помимо нескольких общих оптимизаций, если вам нужно включить разделители в сравнение, вы по существу делаете символ по сравнению с перерывами. Хотя вы можете использовать O (ND), с которым вы связаны, вы собираетесь сделать так много изменений, как вы в основном пишете свои собственные.
Основная проблема сравнения различий заключается в нахождении продолжения (если я удалю одно слово, но оставлю все остальное).
Если вы хотите использовать начало кода в этом примере и не записывать удаленные символы, если заменены символы в одном и том же месте, не выводите этот результат. Затем вам нужно вычислить самый длинный непрерывный запуск "измененных" слов, выделить эту строку и вывести.
Извините, что ответа не так много, но для этой проблемы ответ в основном заключается в написании и настройке функции.
Ну String.Split
с '\n', '' и '\ t', так как разделительные символы возвратят вам массив слова в вашем блоке текста.
Затем вы можете сравнить каждый массив для различий. Простое сравнение 1:1 скажет вам, было ли какое-либо слово изменено. Сравнение:
hello world how are you
и
hello there how are you
предоставит вам world
и изменится на there
.
Что бы вы не сказали вам, было бы, если бы слова были вставлены или удалены, и вам все равно придется разбирать символы текстовых блоков по символу, чтобы увидеть, был ли изменен какой-либо из разделительных символов.