#!/usr/bin/perl # This script should compare 2 files. # One file contains valid data, the other contains bad records from the first file. # The script will eventually print good records to a third file, but at the moment prints debugging info. # The script currently only finds about half of the bad records, 310 of 597 and I don't understand why. use strict; use warnings; my $PARKFILE = shift(@ARGV); my $DATAFILE = shift(@ARGV); my $OUTFILE = shift(@ARGV); my @RECORDS = (); my @PARKED = (); my @SEARCH = (); # Poplulate @RECORDS open(DATA,"<","$DATAFILE"); while () { chomp(my $data_line = $_); $RECORDS[++$#RECORDS] = $data_line; } close DATA; # Populate @PARKED open(PARK,"<","$PARKFILE"); while () { chomp(my $park_line = $_); $PARKED[++$#PARKED] = $park_line; } close PARK; # Get rid of the header and trailer records shift(@PARKED); pop(@PARKED); # Get a substr() of the bad record to use in a regex for (my $s = 0; $s <= $#PARKED; $s++) { $SEARCH[++$#SEARCH] = substr($PARKED[$s], 78, 32); } open(OUT,">>","$OUTFILE"); # Find the bad records for (my $g = 0; $g <= $#RECORDS; $g++) { my $good_rec = $RECORDS[$g]; for (my $b = 0; $b <= $#SEARCH; $b++) { my $bad_rec = $SEARCH[$b]; if ($good_rec =~ /$bad_rec/) { print OUT "MATCH FOUND!\n"; print OUT " DATAFILE: $good_rec\n"; print OUT " POS IN ARRAY: $g\n"; print OUT " LINE IN FILE: ".++$g."\n"; print OUT " PARKFILE: $bad_rec\n"; print OUT " POS IN ARRAY: $b\n"; print OUT " LINE IN FILE: ".++$b."\n\n"; } } } close OUT