$xNeTworKx: 3-fach Hash, oder so ?

Hi,
hab da ein kleines Problemchen, und zwar würde ich gerne folgende Datenstruktur nach dem Datum im Format TT.MM.JJJJ sortieren.
Hier einer Beispiel solche einer Struktur.

<party>
<wann>12.04.2002</wann>
<soundsystem>blabla</soundsystem>
<info></info>
<flyer></flyer>
</party>

Ich will das alle solche Einträge jeweils so sortiert werden, daß der Eintrag mit dem neuesten Datum oben ist (wenn die Daten ausgegeben werden).

Ich bin mal so weit :

#!C:/Perl/bin/perl -w

use strict;
my $in = '';
my @array = ();
my %hash;
    open(FILE,"parties.txt") or die "Cant open database : $!\n";
    local $/;
    $in = <FILE>;
    close FILE;
       while ($in =~ /<party>(.+?)</party>/sg)  {
       my $termin = $1;
             if ($termin =~ /<wann>(\d{2}.\d{2}.\d{4})</wann>/sg)  {
             my $datum = $1;
             push @array, $termin, $datum;
             }
            %hash = @array;
       }
Jetzt wäre es natürlich leicht, zu sortieren, wenn ich nur einen Schlüssel hätte, aber wie kann ich das jetzt bewerkstelligen, wenn ich 3 Werte zu sortieren habe ? Ich darf doch den Zusammenhalt der ganzen Werte nicht verlieren (Tag, Monat, Jahr) und das mein Problem, ich versteh nicht wie ich das anstellen soll ?

  1. Hallo xNeTworKx,

    Jetzt wäre es natürlich leicht, zu sortieren, wenn ich nur einen Schlüssel hätte, aber wie kann ich das jetzt bewerkstelligen, wenn ich 3 Werte zu sortieren habe ? Ich darf doch den Zusammenhalt der ganzen Werte nicht verlieren (Tag, Monat, Jahr) und das mein Problem, ich versteh nicht wie ich das anstellen soll ?

    Einfache Moeglichkeit: den zu sortierenden String temporaer in eine fuer die Sortierung geeignetere Form umzuwandeln. Dazu waere es sinnvoll, gleich die Einzelwerte zu speichern, z.B. so:

    if ($termin =~ /<wann>(\d{2}).(\d{2}).(\d{4})</wann>/sg) {
      my $dd = $1; my $mm = $2; my $yyyy = $3;
      push @array $yyyy.$mm.$dd;

    Dann stehen die Termindaten im Array in der Form:
    20020412
    Das kann man prima sortieren, und die Daten haben eine einheitliche Form, die man spaeter leicht wieder mit einem regulaeren Ausdruck aufdroeseln kann.

    viele Gruesse
      Stefan Muenz

    1. Oh hi, der Chef persönlich =)

      Einfache Moeglichkeit: den zu sortierenden String temporaer in eine fuer die Sortierung geeignetere Form umzuwandeln. Dazu waere es sinnvoll, gleich die Einzelwerte zu speichern, z.B. so:

      if ($termin =~ /<wann>(\d{2}).(\d{2}).(\d{4})</wann>/sg) {
        my $dd = $1; my $mm = $2; my $yyyy = $3;
        push @array $yyyy.$mm.$dd;

      Dann stehen die Termindaten im Array in der Form:
      20020412
      Das kann man prima sortieren, und die Daten haben eine einheitliche Form, die man spaeter leicht wieder mit einem regulaeren Ausdruck aufdroeseln kann.

      Ach Gott =) und ich denk in so komplizierten Dimensionen =).
      Hab bei meinen ersten Versuchen schon mal dd mm und yyyy einzeln zerlegt gehabt, aber nicht mehr weiter gewusst.
      Danke jedenfalls, werds gleich so hin ändern.

      1. Hi,

        Dann stehen die Termindaten im Array in der Form:
        20020412
        Das kann man prima sortieren, und die Daten haben eine
        einheitliche Form, die man spaeter leicht wieder mit einem
        regulaeren Ausdruck aufdroeseln kann.
        Ach Gott =) und ich denk in so komplizierten Dimensionen =).

        http://www.saqqara.demon.co.uk/datefmt.htm