in reply to Need to compare 2 hash values
Here's how I would do it:
use strict; use Text::CSV_XS; use DBI; my $csv_inputfile = "input.csv"; # change me my %data; # hash for storing csv data my $csv = Text::CSV_XS->new; open my $fh, '<', $csv_inputfile or die "can't open $csv_inputfile: $! + \n"; while (my $line = <$fh>) { $line =~ s/^\s+//; # strip leading whitespace next unless $line; # ignore blank lines # assume CSV file looks like: ip, user, nbname if ( $csv->parse($line) ) { my ($ip, $user, $nbname) = $csv->fields(); next unless $ip; $data{$ip} = { USER => $user || '', NBNAME => $nbname || '', }; } else { my $error = $csv->error_diag(); print "Parse error: line $. : $error.\n"; } } close $fh; my $user = "db_user"; # change me my $pass = "db_pass"; # change me my $dbh = DBI->connect( "dbi:mysql:pstsize", $user, $pass, {RaiseError => 1, AutoCommit => 1}, ); unless ($dbh) { die "Could not get database handle."; } my $sth = $dbh->prepare( select_data() ); eval { $sth->execute(); }; if ($@) { die "Database error: ", $dbh->errstr; } print "<html><body><pre>\n"; while ( my ($ip, $user, $nbname) = $sth->fetchrow ) { unless ($user) { print "DB missing USER for $ip."; if ($data{$ip}{'USER'}) { print ".. but CSV file has value: $data{$ip}{'USER'}."; } print "\n"; } unless ($nbname) { print "DB missing NBNAME for $ip."; if ($data{$ip}{'NBNAME'}) { print ".. but CSV file has value: $data{$ip}{'NBNAME'}."; } print "\n"; } } print "</pre></body></html>"; $sth->finish; $dbh->disconnect; sub select_data { return <<" END_SQL"; SELECT DISTINCT ipaddr, user, nbname FROM sizehist ORDER BY ipaddr END_SQL }
Notes:
Good luck!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Need to search through a hashref array to find empty, null, or otherwise translucent key values.
by carlo1973 (Initiate) on May 27, 2009 at 17:17 UTC |