saibsk
asked on
problem when hash value is null
I am retrieving a resultset from the database and pushing the data to hash.
push @{$h{$data[1]}{$data[0]}{$ data[2]}{$ data[3]}}, @data[4,5] ;
This works fine if the data in 4th and 5th field is not null. But if it is null. The hash is not retrieving the result. Please help
push @{$h{$data[1]}{$data[0]}{$
This works fine if the data in 4th and 5th field is not null. But if it is null. The hash is not retrieving the result. Please help
What do you want to put in your hash when 4th and 5th fields are null?
ASKER
I am writing the data to a file. So when the data fields 1, 0, 2, 3 are same I group them and the corresponding 4th and 5th values are written to a file. But when the 4th and 5th fields are null. That record from the result set is not being written to the file. If the 4th and 5th fields are null I want to write empty strings with corresponsing 0,1,2,3 fields to the file.
This would be one way:
$val1 = $data[4] || '';
$val2 = $data[5] || '';
push @{$h{$data[1]}{$data[0]}{$ data[2]}{$ data[3]}}, ($val1, $val2);
In this way if the 4th and 5th fields are undefined the "or" condition will evaluate to an empty string ('')
$val1 = $data[4] || '';
$val2 = $data[5] || '';
push @{$h{$data[1]}{$data[0]}{$
In this way if the 4th and 5th fields are undefined the "or" condition will evaluate to an empty string ('')
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
doesn't work. Problem still exists. Please advise.
How are you writing the data to a file? Post the code for that part of your program.
ASKER
for my $key1 (sort keys %h) {
print FH "\n#Group $key1 Accounts\n";
for my $key0 (sort keys %{$h{$key1}}){
for my $key2 (sort keys % {$h{$key1}{$key0}}){
for my $key3 (sort keys % {$h{$key1}{$key0}{$key2}}) {
#print "\@\$h{$key1}{$key0}{$key2 }{$key3} = @{$h{$key1}{$key0}{$key2}{ $key3}}\n" ;
@arr = ($key0,$key1,$key2,$key3,@ {$h{$key1} {$key0}{$k ey2}{$key3 }});
print FH join("\t,",@arr)."\n";
}
}
}
print FH "\n";
}
print FH "\n#Group $key1 Accounts\n";
for my $key0 (sort keys %{$h{$key1}}){
for my $key2 (sort keys % {$h{$key1}{$key0}}){
for my $key3 (sort keys % {$h{$key1}{$key0}{$key2}})
#print "\@\$h{$key1}{$key0}{$key2
@arr = ($key0,$key1,$key2,$key3,@
print FH join("\t,",@arr)."\n";
}
}
}
print FH "\n";
}
push @{$h{$data[1]}{$data[0]}{$ data[2]}{$ data[3]}}, [@data[4,5 ]];
ASKER
Doesn't seem to work
ASKER
I had to make few changes to the resultset with that shayne321 solution works.