Thread Zeilen einlesen und nach dritter Spalte sortieren
(48 answers)
Opened by leo11 at 2008-08-14 08:06
Ich habe nun den Code von Ronnie etwas abgewandelt:
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 my @datei_to_sort = map {chomp; $_} (<DATA>); my $level_to_sort = 20; my $spalte_to_sort = 5; print Dumper in_three_chunks(\@datei_to_sort, $level_to_sort, $spalte_to_sort); sub in_three_chunks { my $datei_ts = shift; my $level_ts = shift; my $spalte_ts = (shift)-1; return unless ref $datei_ts or not $level_ts =~ /^\d+$/; my %parted = ( before => [], matching => [], after => [] ); for my $zeile (@$datei_ts) { my $spalte = [split /;/, $zeile]; push @{$parted{'matching'}}, $zeile, $spalte->[$spalte_ts] and next if $spalte->[2] == $level_ts; unless (@{$parted{'matching'}}) { push @{$parted{'before'}}, $zeile; } else { push @{$parted{'after'}}, $zeile; } } #print $parted{'matching'}->[1]; sort { $a->($parted{'matching'}->[1]) <=> $b->($parted{'matching'}->[1])} %parted; return \%parted; } __DATA__ Zeile1;;10;;;; Zeile2;;11;;;; Zeile3;;20;;600;; Zeile4;;20;;500;; Zeile5;;20;;800;; Zeile6;;20;;700;; Zeile7;;30;;;; Zeile8;;40;;;; 1.)Die sort-Zeile geht noch nicht. Was muss man schreiben, damit ich folgendem Ergebnis ein Stück näher komme? Zeile1;;10;;;; Zeile2;;11;;;; Zeile4;;20;;500;; Zeile3;;20;;600;; Zeile6;;20;;700;; Zeile5;;20;;800;; Zeile7;;30;;;; Zeile8;;40;;;; 2.)Was bewirkt return unless ref $datei_ts or not $level_ts =~ /^\d+$/; 3.)wie funktioniert unless (@{$parted{'matching'}}) { push @{$parted{'before'}}, $zeile; } else { push @{$parted{'after'}}, $zeile; } Das push verstehe ich, aber die Bedingung für unless ist mir unklar. Was gibt die den zurück? True/false o.ä.? Und wieso? |