in reply to Better Way to Search Large File.
You could try it like this:
#!/usr/bin/perl use warnings; use strict; my $employee_file = 'employee_list.csv'; open OUTFILE, '>', 'test.script' or die "Cannot open 'test.script' $!" +; my $employee_name; if ( @ARGV == 1 ) { $employee_name = $ARGV[ 0 ]; } else { print "\n\nPlease enter the employee's name: "; chomp( $employee_name = <STDIN> ); while ( 1 ) { print "\n\nYou entered $employee_name - is this correct? <y or + n>:"; my $ans = lc substr <STDIN>, 0, 1; if ( $ans eq 'n' ) { print "\n\nPlease enter the server name: "; chomp( $employee_name = <STDIN> ); next; } elsif ( $ans eq 'y' ) { last; } } } my @name_breakdown = split ' ', $employee_name; open my $EFH, '<', $employee_file or die "Cannot open '$employee_file' + $!"; while ( <$EFH> ) { my $field = ( split /:/ )[ 1 ]; push @exact_check, $field if length $field and /\Q$employee_name/ +; push @approx_check, $field if length $field and /\Q$name_breakdown +[1]/ and /\Q$name_breakdown[0]/; } close $EFH; print "EXACT MATCHES:\n", '=' x 50, "\n"; my $key = 'a'; my %lookup; for my $check ( @exact_check ) { $lookup{ $key } = $check; print $key++, ". $check\n"; } print "\n\nAPPROXIMATE MATCHES:\n", '=' x 50, "\n"; for my $check ( @approx_check ) { $lookup{ $key } = $check; print $key++, ". $check\n"; } print "Please select which is correct: "; my $ans = lc substr <STDIN>, 0, 1; if ( exists $lookup{ $ans } ) { my @breakdown = split /,/, $lookup{ $ans }; splice @breakdown, 1, 0, $ans eq 'a' ? 'TESTING' : 'THINGS'; print OUTFILE join ',', @breakdown; } __END__
|
|---|