どうもなんちゃらPerlはあってもUnixじゃない環境らしいので...。
Text::DiffとAlgorithm::Diffって何が違うんだろ?
なんとなくAlgorithm::Diffにしてみたんだけど...使い方あってんのかなぁ?
...あっちゃこっちゃからググってコピペしてきたのはいいがあっちゃこっちゃが多すぎてどこだったか忘れた。
ごめんなさい(´・ω・`)
#!/usr/bin/perl -w
use lib qw(./lib);
use Algorithm::Diff;
use String::Diff;
use File::Compare;
if ( @ARGV != 2 ) {
die "usage: $0 file1 file2 \n"
}
if (File::Compare::compare($ARGV[0], $ARGV[1]) == 0) {
print "the files ($ARGV[0] , $ARGV[1]) are equal\n";
} else {
my @file1 = openFile($ARGV[0]);
my @file2 = openFile($ARGV[1]);
printf "%-45s \t \t %-45s\n", $ARGV[0], $ARGV[1];
my @sdiffs = Algorithm::Diff::sdiff(\@file1, \@file2);
foreach my $diff (@sdiffs) {
my $op = $diff->[0];
my $dat1 = $diff->[1];
my $dat2 = $diff->[2];
chomp $dat1;
chomp $dat2;
if ($op eq "u") {
printf "%-45s \t \t %-45s\n", $dat1, $dat2;
} elsif ($op eq "+") {
printf "%-45s \t>\t %-45s\n", $dat1, $dat2;
} elsif ($op eq "-") {
printf "%-45s \t<\t %-45s\n", $dat1, $dat2;
} else {
my $linediff = String::Diff::diff($dat1, $dat2,
remove_open => '<',
remove_close => '>',
append_open => '[',
append_close => ']',
);
printf "%-45s \t|\t %-45s\n", $linediff->[0], $linediff->[1];
}
}
}
sub openFile {
my $fname = shift;
open(fileIN,"$fname") || die('FILE OPEN ERROR!');
my @file = <fileIN>;
close(fileIN);
return @file;
}[air:~/diff] youichi% cat -n original
1 1 This part of the
2 2 document has stayed the
3 3 same from version to
4 4 version. It shouldn't
5 5 be shown if it doesn't
6 6 change. Otherwise, that
7 7 would not be helping to
8 8 compress the size of the
9 9 changes.
10 10
11 11 This paragraph contains
12 12 text that is outdated.
13 13 It will be deleted in the
14 14 near future.
15 15
16 16 It is important to spell
17 17 check this dokument. On
18 18 the other hand, a
19 19 misspelled word isn't
20 20 the end of the world.
21 21 Nothing in the rest of
22 22 this paragraph needs to
23 23 be changed. Things can
24 24 be added after it.
[air:~/diff] youichi% cat -n new
1 1 This is an important
2 2 notice! It should
3 3 therefore be located at
4 4 the beginning of this
5 5 document!
6 6
7 7 This part of the
8 8 document has stayed the
9 9 same from version to
10 10 version. It shouldn't
11 11 be shown if it doesn't
12 12 change. Otherwise, that
13 13 would not be helping to
14 14 compress anything.
15 15
16 16 It is important to spell
17 17 check this document. On
18 18 the other hand, a
19 19 misspelled word isn't
20 21 Nothing in the rest of
21 22 this paragraph needs to
22 23 be changed. Things can
23 24 be added after it.
24 25
25 26 This paragraph contains
26 27 important new additions
27 28 to this document.
[air:~/diff] youichi% ./diff.pl original new
original new
1 This <p>a<rt> o<f >t<he> | 1 This [is ]a[n] [imp]o[r]t[ant]
2 <d>oc<um>e<nt> <has s>t<ayed> <t>h<e> | 2 [n]o[ti]ce[!] [I]t [s]h[ould]
3 <sam>e< f>ro<m> <v>e<rsi>o<n> t<o> | 3 [th]er[ef]o[re] [b]e[ l]o[cated] [a]t
4 <v>e<rs>i<o>n<.> <I>t< s>h<ouldn't> | 4 [th]e[ beg]in[ning] [of] th[is]
5 <be shown if it >doe<s>n<'>t | 5 do[cum]ent[!]
6 <change. Otherwise, that> | 6
7 <would> <no>t <be> he<lping to> | 7 [This] [par]t [of] [t]he
8 <c>om<pr>e<ss >th<e> s<iz>e< of> the | 8 [d]o[cu]me[n]t[ ]h[as] s[tay]e[d] the
9 <ch>a<ng>es<.> | 9 [s]a[m]e[ from ver]s[ion to]
10 | 10 [version. It shouldn't]
11 <T>hi<s> <paragraph> <c>ont<ains> | 11 [be s]h[own ]i[f] [it] [d]o[es]n[']t
12 <t>e<xt> th<at >is <ou>t<d>at<ed.> | 12 [chang]e[.] [ O]th[erw]is[e,] t[h]at
13 <It >w<i>l<l> be <d>el<eted >in t<he> | 13 w[ou]l[d] [not ]be [h]el[p]in[g] t[o]
14 <nea>r <fu>t<ure>. | 14 [comp]r[ess] [any]t[hing].
15 15
16 It is important to spell 16 It is important to spell
17 check this do<k>ument. On | 17 check this do[c]ument. On
18 the other hand, a 18 the other hand, a
19 misspelled word isn't 19 misspelled word isn't
20 the end of the world. <
21 Nothing in the rest of 21 Nothing in the rest of
22 this paragraph needs to 22 this paragraph needs to
23 be changed. Things can 23 be changed. Things can
24 be added after it. 24 be added after it.
> 25
> 26 This paragraph contains
> 27 important new additions
> 28 to this document.