без группировки несвязанных блоков - PullRequest
2 голосов
/ 26 января 2010

Существует ли алгоритм сравнения, который не группирует несвязанные блоки?

Например:

hello world
lorem ipsum dolor sit amet

против

Hello World
Lorem Ipsum Dolor Sit Amet

Сравнение (например, со стандартным Unix diff) обычно приводит к следующему:

< hello world
< lorem ipsum dolor sit amet
---
> Hello World
> Lorem Ipsum Dolor Sit Amet

Однако, построчное сравнение, подобное следующему, может показаться более разумным:

< hello world
---
> Hello World

< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet

Последнее, ИМО, значительно облегчает анализ незначительных изменений. (Обратите внимание, что здесь я имею в виду удобочитаемость, а не машинную читаемость.)

Я понимаю, что диффузия - это сложная проблема, но, тем не менее, это часто оставляет меня озадаченным.

Ответы [ 2 ]

4 голосов
/ 26 января 2010

Хотя преднамеренно означает, что diff ведет себя так, что вы можете изменить его, добавив пустые строки.Это даст желаемый результат.

1:

hello world

lorem ipsum dolor sit amet

Same

2:

Hello World

Lorem Ipsum Dolor Sit Amet

Same

Хотя номер строки должен быть фиксированным (n / 2 + 1).

1c1
< hello world
---
> Hello World
3c3
< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet

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

1,3c1
< hello world
<
< lorem ipsum dolor sit amet
---
> Hello World
1 голос
/ 26 января 2010

Алгоритм diff является решением самой длинной общей проблемы подпоследовательности . Однако, похоже, вас не интересует другой алгоритм. Поскольку связано или нет, обе строки изменились , и вы говорите о том, как разница представлена ​​в тексте.

Томас Юнг показал оригинальный формат . Википедия показывает несколько вариантов . Но найдите время, чтобы поэкспериментировать.

diff original new

Произведет оригинальный формат.

diff -c original new

Создает контекстный формат .

diff -u original new

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

Конечно, если способ представления разницы имеет решающее значение, я думаю, вы найдете любого из diff зрителей значительно превосходящих.

...