Hallo!
Mein Problem:
ich will eine liste einlesen und dann mit verschiedenen sortierungen ausgeben. jeder datensatz kann über eine eindeutige ID abgerufen werden. wenn ich z.B nach größe sortieren will, sollte nach der sortierung ein array mit den vorsortierten IDs entstehen, das dann abgearbeitet wird. ich könnte ja einen neuen hash erstellen a la $tmp{$size} = $id; und dann mit @print = sort { $a <=> $b; } values %tmp; das gewünschte array erhalten. das dumme ist nur, das die größe ja mehrfach vorkommen kann und als schlüssel für einen hash nicht mehr taugt...
zur verdeutlichung hier das skript:
------------------------------------------
#!/usr/bin/perl
der improvisierte datensatz
$data = "
#name,size,time
name1,1,1
name2,1,2
name3,2,1
";
den datensatz einlesen und in der struktur
$data{id}{key} = value
speichern
$id = 1;
@datasets = split /\n/, $data;
foreach (@datasets) {
next if $_ eq '' or $_ =~ /^#/;
( $data{$id}{name},
$data{$id}{size},
$data{$id}{time}
) = split /,/, $_;
$id++;
}
@print = keys %data;
bei der ausgabe soll nur noch ein vorsortiertes
array abgearbeitet werden, das die id der datensätze
enthält
print "ID\tNAME\tSIZE\tTIME\n";
foreach (@print) {
$id = $_;
print "$id\t$data{$id}{name}\t$data{$id}{size}\t$data{$id}{time}\n";
}
jetzt so, wie ich es die ganze zeit
versuche, was natürlich nicht klappt
foreach $id (keys %data) {
print "$data{$id}{name}\t$data{$id}{size}\n";
$tmp{ $data{$id}{size} } = $id;
}
@print = sort { $b <=> $a } values %tmp;
print "ID\tNAME\tSIZE\tTIME\n";
foreach (@print) {
$id = $_;
print "$id\t$data{$id}{name}\t$data{$id}{size}\t$data{$id}{time}\n";
}
---------------------------------------------------
falls irgendjemand eine idee hat, würde ich mich tierisch drüber freuen
ciao
micha