Бесплатный настраиваемый инструмент сравнения?

Есть ли инструмент сравнения, который позволяет мне написать регулярное выражение, чтобы удалить строку из разницы?

Мол, смотри две строчки:

this.Visible = true;
Visible = true;

И могу ли я написать такое выражение, что если разница в строках ровно this, игнорировать разницу.

Как мне это конкретно сделать?

Приведу еще один пример. Подобно тому, как System.Exception и Exception для меня одинаковы, я не хочу показывать их в различиях.


person Priyank Bolia    schedule 22.12.2009    source источник
comment
Вместо того, чтобы заставлять инструмент сравнения делать прямо противоположное тому, что он должен делать (показать, что отличает), и полагаться на доступность такого инструмента, почему бы не использовать простой инструмент, такой как sed или m4, чтобы сначала исправить файл?   -  person z5h    schedule 22.12.2009
comment
исправление файла приведет к изменению содержимого, и как бы вы исправили файл частично, не все это или система удаляются. Я просто хочу игнорировать те, которые вызывают какие-либо различия.   -  person Priyank Bolia    schedule 22.12.2009
comment
Еще я бы подумал, что это просто плохая практика. this.xxx не означает то же самое, что и xxx. Первый дает вам свойство xxx текущего объекта, второй получает xxx в ближайшей области. Может быть ошибка, которую вы пропустите в результате игнорирования различий. Это просто кажется плохой привычкой. В любом случае удачи в поиске решения.   -  person z5h    schedule 22.12.2009
comment
Я полагаю, что это зависит от того, почему вы вообще делаете разницу. Предположительно, это часть вашего процесса проверки системы контроля версий? Если это так, просто воспользуйтесь возможностью устранить различия между двумя файлами (независимо от стандарта кодирования вашей организации) и зарегистрируйте файл - проблема больше не должна быть проблемой. Мои извинения, если мои предположения неверны   -  person belugabob    schedule 24.12.2009
comment
@belugabob: Хорошо, позвольте мне объяснить, во-первых, меня не волнует, удаляю ли я правильное «это». или нет, у меня много таких различий, и я хочу сосредоточиться только на одном важном, а именно на «этом». для меня не важен, так как большая часть рефакторинга выполняется мной только с использованием CodeRush, поэтому я знаю, что они правы, но перед проверкой мне нужно дважды проверить, что я проверяю. Почему эта функция важна, может быть scootersoftware.com/videos/WN3Replacements.html видео объяснит больше, но это важно для меня . устранить различия между двумя файлами, я не понимаю, как это различие   -  person Priyank Bolia    schedule 24.12.2009


Ответы (8)


Вы можете сделать это с помощью KDiff3. См. Раздел документации о командах препроцессора.

Обновление: у вас есть еще один запрос, который, похоже, требует программы семантического сравнения. См. Некоторые предложения в Утилитах семантических различий.

person Greg Hewgill    schedule 22.12.2009
comment
Не могли бы вы объяснить больше, поскольку я предполагаю, что препроцессор соответствует всей строке, и вы не можете указать игнорировать, когда разница в этом. - person Priyank Bolia; 22.12.2009
comment
Правильно, вы не можете прямо сказать, игнорировать такого рода различия. Однако вы можете нормализовать входные данные, чтобы различия больше не появлялись. Например, чтобы игнорировать регистр букв во входных данных, вы можете преобразовать все символы верхнего регистра в нижний регистр с помощью команды препроцессора сопоставления строк. В вашем примере вы можете удалить все экземпляры this. из строк ввода, используя тот же фильтр. - person Greg Hewgill; 22.12.2009
comment
это дало бы совершенно неверные результаты, и это не мой вопрос. Я думаю, WinMerge также имеет фильтрацию строк. Меня интересует фильтрация различий. - person Priyank Bolia; 22.12.2009
comment
Похоже, вас больше интересует семантическая разница, а не текстовая. Я обновил свой ответ ссылкой на дополнительную информацию. - person Greg Hewgill; 22.12.2009
comment
который принял ответ как Eclipse, что бесполезно для людей C #. Кроме того, я все еще ищу что-то настраиваемое, а не семантическое различие, хотя я делаю только семантическое различие, но скрываю только интересующее меня различие. - person Priyank Bolia; 22.12.2009

DiffMerge от SourceGear поддерживает это. Вам нужно будет создать набор правил, соответствующий объединяемым файлам, или отредактировать набор правил по умолчанию. В наборе правил добавьте шаблоны в свойство Lines to Omit. См. Свойство Ommitted Lines в интерактивной справке для получения дополнительной информации.

person David Norman    schedule 22.12.2009
comment
неправильный ответ (-1), где вариант. Пожалуйста, подробно укажите, как игнорировать конкретные различия. - person Priyank Bolia; 22.12.2009
comment
Уже пробовал, что не работает. Добавлен шаблон this [.], А также ^ (\ s) * this [.] (.) * $, Но ничего не работает. - person Priyank Bolia; 22.12.2009

Лучшее программное обеспечение для сравнения источников, которое я когда-либо использовал, было Beyond Compare. С его помощью вы могли делать именно то, о чем просили: вводить регулярное выражение, сообщающее программе игнорировать определенные различия. Однако это не бесплатно.

Если вам действительно нужно бесплатное приложение, вы можете попробовать WinMerge. Впрочем, интерфейс мне не очень нравится.

person Bruno Brant    schedule 22.12.2009
comment
И как это сделать в BeyondCompare, я не могу найти в этом варианта, интерфейс довольно запутанный. - person Priyank Bolia; 22.12.2009
comment
В версии 2 в разделе «Сравнение файлов» выберите Инструменты- ›Выбрать правила-› Новые правила. Затем перейдите на вкладку «Важность» и в разделе «Неважный текст» нажмите «Создать», выберите «Регулярное выражение» и тада! - person Bruno Brant; 23.12.2009
comment
Если вы используете версию 3, дайте мне знать, я поищу конфигурацию. - person Bruno Brant; 23.12.2009
comment
Спасибо. Я обратился в службу поддержки, и, похоже, все работает. Он находится на вкладке «Замена правил». В версии 3 нет неважного текста. Я думаю, они его изменили. - person Priyank Bolia; 23.12.2009
comment
это \. (. *) ‹› $ 1 доступно в меню сеанса сравнения текста - ›Настройки сеанса, вкладка Замены - person Priyank Bolia; 23.12.2009

Notepad ++ имеет плагин сравнения, который легко настраивается.

person Jay Zeng    schedule 22.12.2009
comment
Подскажите, как это сделать в Notepad ++? - person Priyank Bolia; 22.12.2009
comment
После установки notepad ++ перейдите в «Плагин» - ›« Сравнить », вы увидите там множество параметров, которые можно настроить, или вы можете выбрать первый вариант« Сравнить »(бонус: Alt + D), чтобы выполнить сравнение. - person Jay Zeng; 22.12.2009
comment
Не думаю, что вы уловили вопрос. Нет такой опции, где я могу установить Regex. - person Priyank Bolia; 22.12.2009
comment
Диалог поиска и замены уже позволяет выполнять регулярное выражение. - person Jay Zeng; 22.12.2009
comment
Я умею искать и заменять в блокноте ++, пользуюсь им уже много лет, вопрос в том, чтобы игнорировать различия в инструментах diff. - person Priyank Bolia; 22.12.2009
comment
В этом случае все дело в вашем регулярном выражении, если вы использовали его годами, то я думаю, вы не потратили достаточно времени на его копание. - person Jay Zeng; 22.12.2009

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

В Python есть модуль diff для написания инструментов, подобных diff, которые справятся со всеми сложностями. алгоритма сравнения для вас. У них есть пример скрипта, который выполнит сравнение файлов в стандартном Unix diff / patch или параллельный HTML в 60 строках кода.

Различия в модуле позволяют вам определять «ненужные» фильтры для строк предварительной обработки, чтобы удалить части, которые вы не хотите включать в различие. Это функции Python, поэтому вы не ограничены совпадениями с регулярными выражениями.

Я быстро перечитал документацию, и фильтры работают только для игнорирования целых строк или отдельных символов, что вам не нужно. Однако вы можете легко предварительно обработать данные, которые вы вводите в дифференциал, чтобы удалить текст, который вы хотите игнорировать.

person Dave Kirby    schedule 22.12.2009

Мне не удалось найти эту функцию ни в одном программном обеспечении, хотя она есть в Beyond Compare и Araxis.

Судя по вики WinMerge, похоже, что они не будут поддерживать плагины или любые подобные функции в новом будущем. Очень плохо.

person Priyank Bolia    schedule 24.12.2009

Если вы знаете, как писать на JavaScript, вы можете вставить соответствующее регулярное выражение в часть минификации инструмента Pretty Diff. Инструмент полностью бесплатный, а код полностью открыт со встроенной документацией.

Если есть конкретная функция, которую вы хотели бы добавить в инструмент, помимо личной настройки, сообщите мне, и я добавлю ее.

person Community    schedule 01.01.2010
comment
Честно говоря, это ни в коем случае не похоже на инструмент сравнения. Хороший инструмент - это инструмент, которому не нужно время на изучение, а хороший пользовательский интерфейс заключается в следующем: не заставляйте меня думать. - person Priyank Bolia; 01.01.2010
comment
Ты получаешь то, за что платишь. Хороший инструмент - это инструмент с хорошо написанной документацией. - person ; 01.01.2010

Попробуйте GNU diffutils. Если вы работаете в Windows, вы можете распространять GNU diff с помощью Cygwin с www.cygwin.com .

person Ken    schedule 01.01.2010
comment
не думайте, что это что-то другое, это подавляет целую строку, как другие, а не только разницу. Поправьте меня пожалуйста, если я ошибаюсь. - person Priyank Bolia; 01.01.2010