Roland: 2 Dimensionales HashArray

Beitrag lesen

ich nochmal...

zum Sortieren will ich nun auf die Keys des Hashes zugreifen...
jedoch gibt es bei mir das Hash %datei garnicht...
Des macht aber Stutzig denn ich deklariere ja das Hash extra noch ganz am Anfang des Scriptes und füge dann wie von dir beschrieben die einzelen Werte hinzu...
ich hab in der Perldoc jetzt auch noch nix gefunden...
(falls ich überhaupt an der korrekten stelle suche *g* )
*grübel*

Gruß
Steffen

Hallo Steffen,

es gibt da zwei Loesungen

1. Loesung mit 2 Dim. Hash,
------------------------------------------------------------------
#!perl
#%hash_datei = (
#                1 => {
#                       name => "Egon",
#                       wert => 34,
#                     },
#              )
my %hash_datei;
while ( <DATA> ){
 chomp;
 my ($id,$name,$wert) = split /|/;
 $hash_datei{$id}{'name'} = $name;
 $hash_datei{$id}{'wert'} = $wert;
}
my @all_id   = sort  keys %hash_datei;
print "@all_id\n";
print "#" x 60 , "\n";

#Ausgabe vom hash_datei ; sort nach id
foreach my $id ( sort {$a <=> $b} keys %hash_datei ) {
     print "$id: { ";
     for my $zeile ( sort keys %{ $hash_datei{$id} } ) {
         print "$zeile=$hash_datei{$id}{$zeile} ";
     }
     print "}\n";
}
__DATA__
1|Egon|34
4|Franz|23
8|Jurgen|9
13|Kurt|1
-------------------------------------------------------------------

2. Loesung mit Referenzen, das ist mein Vorschlag
-------------------------------------------------------------------
#!perl
#Loesung mit Referenzen
my $ref_datei;
while ( <DATA> ){
 chomp;
 my ($id,$name,$wert) = split /|/;
 $ref_datei->{$id}->{'name'} = $name;
 $ref_datei->{$id}->{'wert'} = $wert;
}

print "#" x 60 , "\n";

my @all_id   = sort { $a <=> $b } keys %{$ref_datei};
my @all_name = map  { $ref_datei->{$_}->{name} }  keys %{$ref_datei} ;
my @all_wert = map  { $ref_datei->{$_}->{wert} }  keys %{$ref_datei} ;
print "@all_id\n@all_name\n@all_wert\n";

print "#" x 60 , "\n" x 3 , "sort nach id\n";
foreach ( keys %{$ref_datei} ){
 print "$_ name = $ref_datei->{$_}{name}  wert  =$ref_datei->{$_}->{wert}\n";
}

print "#" x 60 , "\n" x 3 , "sort nach wert\n";
foreach ( sort { $a->{'wert'} <=> $b->{'wert'} } keys %{$ref_datei} ){
 print "$_ name = $ref_datei->{$_}{name}  wert  =$ref_datei->{$_}->{wert}\n";
}

print "#" x 60 , "\n" x 3 , "sort nach name\n";
foreach ( sort { $a->{'name'} cmp $b->{'name'} } keys %{$ref_datei} ){
 print "$_ name = $ref_datei->{$_}{name}  wert  =$ref_datei->{$_}->{wert}\n";
}
__DATA__
1|Egon|34
4|Franz|23
8|Jurgen|9
13|Kurt|1
------------------------------------------------------------------

mehr Infos unter perldsc.

Ich benutzt nur noch Referenzen also "my $tmp = {};", das ist kein Hash.

Bye
Roland