#!/usr/bin/perl -w # This script compares two SDF files and prints the changed, added and deleted lines (ignores 'width') use strict; my $sdffile1 = $ARGV[0]; my $sdffile2 = $ARGV[1]; if (!$sdffile1) {die "Usage: $0 old-sdf new-sdf\n";} if (!$sdffile2) {die "Usage: $0 old-sdf new-sdf\n";} # ( leftpart ) ( rightpart ) # prj file dummy type gid lid helpid pform width lang text helptext qhelptext title timestamp my $sdf_regex = "((([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t])*\t([^\t]*))\t([^\t]*)\t([^\t]*)\t(([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t)([^\t]*))"; my %compare_en = (); my %compare_loc = (); # Changed lines print "\n\nCHANGED LINES\n\n"; open FILE1 , "< $sdffile1" or die "Can't open '$sdffile1'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; if ($lang eq 'en-US') {$compare_en{$leftpart} = $rightpart;} else {$compare_loc{$leftpart} = $rightpart;} } } close(FILE1); open FILE2 , "< $sdffile2" or die "Can't open '$sdffile2'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; if ($lang eq 'en-US' && exists $compare_en{$leftpart}) { chomp; if ($compare_en{$leftpart} ne $rightpart) {print "Leftpart: $leftpart\nNEW: $rightpart\nOLD: $compare_en{$leftpart}\n\n";} } elsif (exists $compare_loc{$leftpart}) { chomp; if ($compare_loc{$leftpart} ne $rightpart) {print "Leftpart: $leftpart\nNEW: $rightpart\nOLD: $compare_loc{$leftpart}\n\n";} } } } close(FILE2); # Deleted lines print "\n\nDELETED LINES\n\n"; %compare_en = (); %compare_loc = (); open FILE1 , "< $sdffile2" or die "Can't open '$sdffile2'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; if ($lang eq 'en-US') {$compare_en{$leftpart} = $rightpart;} else {$compare_loc{$leftpart} = $rightpart;} } } close(FILE1); open FILE2 , "< $sdffile1" or die "Can't open '$sdffile1'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; chomp; if ($lang eq 'en-US') {print "$_\n" if !exists $compare_en{ $leftpart };} else {print "$_\n" if !exists $compare_loc{ $leftpart };} } } close(FILE2); # New lines print "\n\nNEW LINES\n\n"; %compare_en = (); %compare_loc = (); open FILE1 , "< $sdffile1" or die "Can't open '$sdffile1'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; if ($lang eq 'en-US') {$compare_en{$leftpart} = $rightpart;} else {$compare_loc{$leftpart} = $rightpart;} } } close(FILE1); open FILE2 , "< $sdffile2" or die "Can't open '$sdffile2'\n"; while(){ if( /$sdf_regex/ ){ my $leftpart = defined $2 ? $2 : ''; my $rightpart = defined $13 ? $13 : ''; my $lang = defined $12 ? $12 : ''; chomp; if ($lang eq 'en-US') {print "$_\n" if !exists $compare_en{ $leftpart };} else {print "$_\n" if !exists $compare_loc{ $leftpart };} } } close(FILE2); exit 0;