diff with Unified Format
前に作ったO(NP)なdiffのプログラムを元に、
2つのファイルの差分をUnified Formatで表示できるようにしてみた。
とりあえず、以下のe.txtとd.txtの差分を表示してみる。
e.txt
a d e c f e a b c d e f g h i
d.txt
a e c z z d e f a b c d e f g h i
この2つのファイルの差分を表示するわけだが、
まず、比較対象として普段UNIX系のOSを使っている大半の人が使っているであろう、
GNU diffutilsのdiffを使ってみる。
narazuya@bokkko% diff -u e.txt d.txt --- e.txt 2008-09-05 03:42:14.000000000 +0900 +++ d.txt 2008-09-05 03:41:57.000000000 +0900 @@ -1,9 +1,11 @@ a -d e c -f +z +z +d e +f a b c narazuya@bokkko%
続いて自分のC++製UnifiedFormatなdiff。日付部分の表示が微妙に違うのは大目に見てやってください。
narazuya@bokkko% ./unidiff e.txt d.txt --- e.txt 2008-09-05 03:42:14 +0900 +++ d.txt 2008-09-05 03:41:57 +0900 @@ -1,9 +1,11 @@ a +e +c +z +z d e -c f -e a b c narazuya@bokkko%
う〜ん、差分の適用結果自体は同じになるけど、SESの経路が微妙に違うなあ。
単にアルゴリズムが違うからか?*1
ちなみにdiffのアルゴリズムそのものを実装するより、
Unified Formatで表示するプログラムを書く方が難しかったというのはまた別の話。*2