Thread Sortierung nach Array
(18 answers)
Opened by bianca at 2012-12-25 18:11
Guten Abend und noch ein schönes Restweihnachtsfest!
Ich möchte im Script einen Hash, der als mehrspaltige Tabelle aufgebaut ist sortiert ausgeben. Dabei habe ich Sortierreihenfolge, Art der Felder und die jeweilige Richtung pro Spalte in jeweils einem Array. Meine erste Idee war eine Schleife innerhalb von {sort}. Aber irgendwie dachte ich mir schon, dass das nicht so einfach wird. Hier mein Versuch und weitere Details: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #!/usr/bin/perl -w use strict; use warnings; my %uebergabe = ( data => { 1 => { 1 => 'aaron', 2 => 'suppe', 3 => 10, }, 2 => { 1 => 'aaron', 2 => 'zander', 3 => 20, }, 3 => { 1 => 'hannes', 2 => 'zander', 3 => 20, }, }, art => ['a','a','n'], # Art der Spalte a=Alpha oder n=Nummer sortierprio => [1,2,3], # Erst nach Spalte 1, dann nach 2, dann nach 3 sortierricht => [1,0,1], # Sortierrichtung 0=abwärts/rückwärts oder 1=aufwärts/vorwärts ); tabellenhandler(\%uebergabe); ############################################################################### sub tabellenhandler { my ($input) = @_; foreach my $zeile ( sort { for (my $sp_sort = 0; $sp_sort < scalar @{$input->{sortierprio}}; $sp_sort ++) { if ($input->{sortierricht}[$sp_sort]) { if ($input->{art}[$sp_sort] eq 'n') { $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} <=> $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} } else { $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} cmp $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} } } else { if ($input->{art}[$sp_sort] eq 'n') { $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} <=> $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} } else { $input->{data}{$b}{$input->{sortierprio{$sp_sort}}} cmp $input->{data}{$a}{$input->{sortierprio{$sp_sort}}} } } } } keys %{$input->{data}} ) { print "Zeile:"; foreach my $spalte ( keys %{$input->{data}{$zeile}} ) { print " - ".$input->{data}{$zeile}{$spalte}; } print "\n"; } } Fehlermeldungen: Quote Verliert also den Zusammenhang zwischen dem sort{} Block und dem $a/$b. Wie muss die Syntax richtig lauten? Bei diesen Variablen erwarte ich in der Reihenfolge die Ausgabe der Zeilen 2, 1, 3, weil in Zeile 1 und 2 aaron zwar gleich sind aber deren Spalten 2 unterschiedlich und rückwärts sortiert sein sollen, also zander vor suppe. Danke euch Editiert von bianca: Code korrigiert, ändert aber die Fehlermeldungen nicht Last edited: 2012-12-25 18:24:08 +0100 (CET) 10 print "Hallo"
20 goto 10 |