diffコマンド(とRuby)で文字列のdiffを取ってみた

  • 文字列の diff を取るライブラリを探そうとした
  • 調べるのがめんどくさくなった
  • 普通の diff(行の diff)も文字列の diff(1行内の diff)も原理的には同じだよね? diff コマンドでいんじゃね?

というわけで split して diff に渡してみました。

# -*- coding: utf-8 -*-
def write(file, str)
  open(file, "w"){|f| f.puts str.split(//) }
end

file_a = "str_diff_a.txt"
file_b = "str_diff_b.txt"

write(file_a, "..B.C.")
write(file_b, ".A..D.")

puts `diff -u #{file_a} #{file_b}`
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
--------------------------------
$ cat str_diff_a.txt 
.
.
B
.
C
.
--------------------------------
$ cat str_diff_b.txt 
.
A
.
.
D
.
--------------------------------
$ ruby str-diff.rb 
--- str_diff_a.txt	2012-02-16 22:00:37.223144895 +0900
+++ str_diff_b.txt	2012-02-16 22:00:37.223144895 +0900
@@ -1,6 +1,6 @@
 .
+A
 .
-B
 .
-C
+D
 .

めんどくさいときはこれでいいかも。



2024-02-12 追記

diff コマンドを使わずに Ruby だけでやりたい場合は以下を参照してください。

qiita.com