посимвольный diff - как? ((difflib.py, Python))

Модератор: Модераторы разделов

Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

посимвольный diff - как?

Сообщение Doka »

Используя пример описанный http://docs.python.org/2/library/difflib.html
хочется получить такой результат:

$ cat 1
10100001
10000011
10101100

$ cat 2
10000011
10101100
10111001

$ ./myprog.py 1 2
10000011
10101100
10111001

- изменённый символ может быть выделен как bold, подчёркивание или цветом.

вроде бы в difflib, используя ndiff можно получить что-то похожее - маркер на символ, который был изменён,
но в реальности не получается воспроизвести пример, получив схожий результат:

Код: Выделить всё

>>> import sys, os, difflib
>>> c1 = '10100001'
>>> c2 = '10000101'
>>> diff = difflib.ndiff(c1,c2)
>>> print ''.join(diff)
- 1- 0  1  0  0  0  0  1+ 0+ 1

>>> diff = difflib.ndiff(c1.splitlines(1),c2.splitlines(1))
>>> print ''.join(diff)
- 10100001? --
+ 10000101?       ++

>>> d = difflib.Differ()
>>> result = list(d.compare(c1, c2))
>>> sys.stdout.writelines(result)
- 1- 0  1  0  0  0  0  1+ 0+ 1


всё не то((((

PS: смотрел cmp, diff, wdiff, sdiff - нужного функционала не обнаружил
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: посимвольный diff - как?

Сообщение drBatty »

Doka
не проще-ли самому написать? что-то вроде

Код: Выделить всё

while(*s1 && *s2)
{
 if(*s1 != *s2)
  printf("код болда");
 c = *s1;
 if(!*s1)
 {
  printf("код зелёного");
  c = *s2;
 }
 else
  s1++;
 if(!*s2)
  printf("код красного");
 else
  s2++;
 printf("%c", c);
 }
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Doka
Сообщения: 715
Статус: ASIC Design Engineer
ОС: RHEL4

Re: посимвольный diff - как?

Сообщение Doka »

drBatty
спасибо, переписал под себя на Си (но думал что должны существовать какие-то баш-решения "изкоробки" о которых я не знаю)
в вашем примере ругается на " s1++;"
Never stop thinking..................................................................
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: посимвольный diff - как?

Сообщение serzh-z »

Спасибо сказали: