Rafael Morales wrote:
> Hi.
Hello,
> My trouble is with a value duplicated value on a nested foreach, these are my
> variables:
>
> %names=(
> 1=>'NA'
> 2=>'NCW'
> 3=>'NE'
> 4=>'S'
> 5=>'SE'
> 6=>'SP'
> );
>
> %hash{'2005-09-19'}{'1'}{'56'}=788;
> %hash{'2005-09-19'}{'1'}{'43'}=540;
> %hash{'2005-09-19'}{'6'}{'23'}=321;
> %hash{'2005-09-19'}{'3'}{'10'}=975;
>
> And I want an output like this:
> 2005-09-19 - NA - 56 - 788
> 2005-09-19 - NA - 43 - 540
> 2005-09-19 - NCW - 0 - 0
> 2005-09-19 - NE - 10 - 975
> 2005-09-19 - S - 0 - 0
> 2005-09-19 - SE - 0 - 0
> 2005-09-19 - SP - 23 - 321
>
> I do it by this way:
>
> my %final;
> my $match = 0;
> foreach my $date(sort keys %hash) {
> foreach my $num_name(sort {$a <=> $b}(keys %{$hash{$date}}) ) {
> foreach my $names(sort {$a <=> $b}(keys %names) ) {
> if ($num_name == $names) {
> $match = 1;
> foreach my $values(sort {$a <=> $b}(keys %{$hash{$date}{$num_state}})
> ) {
>
> $final{$date}{$names{$names}}{$values}=$hash{$date}{$num_state}{$values};
> } #end values
> } #end if
> else {$match = 0;}
> }end names
> if ($match == 0){
> $final{$date}{$names{$names}}{0}=0;
> }#end if
> }end num_name
> }end date
>
> However this is what I get:
> 2005-09-19 - NA - 0 - 0 <----- Repeated value :(
> 2005-09-19 - NA - 56 - 788
> 2005-09-19 - NA - 43 - 540
> 2005-09-19 - NCW - 0 - 0
> 2005-09-19 - NE - 10 - 975
> 2005-09-19 - S - 0 - 0
> 2005-09-19 - SE - 0 - 0
> 2005-09-19 - SP - 23 - 321
It looks like you want something like:
for my $date ( keys %hash ) {
for my $num_name ( keys %{ $hash{ $date } } ) {
if ( exists $names{ $num_name } ) {
$hash{ $date }{ $names{ $num_name } }
= delete $hash{ $date }{ $num_name };
}
}
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>