Thread split mit mehreren Trennungszeichen (4 answers)
Opened by Xertno at 2011-11-02 16:48

GUIfreund
 2011-11-03 13:45
#153806 #153806
User since
2011-08-08
559 Artikel
BenutzerIn
[default_avatar]
2011-11-03T08:19:03 Xertno
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
# sort the data in the array by date

my @sdata = map  $_->[0],
            sort { $b->[1][2] <=> $a->[1][2] or  # year
                   $b->[1][1] <=> $a->[1][1] or  # month
                   $b->[1][0] <=> $a->[1][0] or  # day
                   $b->[1][3] <=> $a->[1][3] or  # Stunde
                   $b->[1][4] <=> $a->[1][4] or  # Minute
                   $b->[1][5] <=> $a->[1][5]   # Sekunde
                  }
            map  [$_, [split m{[/: ]}, $_->{date}]], @data;

Was ich noch nicht ganz verstehe warum bei $b->[1][5] noch die [1] steht.

Wie du im OP schreibst, hast du dies aus einer Vorlage kopiert und an deine Daten angepasst. Das läßt vermuten, dass dir der Begriff "Schwarz'sche Transformation" noch fremd ist. Dieses Sortierverfahren wird gerne bei großen Datenmengen mit komplexer Sortiervorschrift eingesetzt. Um es zu verstehen, musst du das map-sort-map von unten nach oben lesen.

Als Alternative könntest du im Vorfeld deine Sortierkriterien ändern: entweder die Einzelteile in der richtigen Reihenfolge Jahr-Monat-Tag... zu einem String zusammenfassen oder mittels CPAN:Date::Calc in Epochen-Sekunden umwandeln. Dann hättest du nur noch einen Stringvergleich bzw. Zahlenvergleich und könntest auf die Schwarz'sche Transformation verzichten.

modedit Editiert von pq: s/DATE::Calc/Date::Calc/
Last edited: 2011-11-03 13:51:50 +0100 (CET)
Gruß
GUIfreund

View full thread split mit mehreren Trennungszeichen