Petra: verschachtelte Datenstrukturen

Ich habe folgendes Problem (einfach umschrieben):

die Datei: BauerA.html beinhaltet folgende Informationen:
BauerA -> Kühe = 3;
       -> Pferde = 2;

die Datei: BauerB.html  beinhaltet folgende Informationen:
BauerB -> Kühe = 1,
       -> Pferde = 5;
       -> Gänse = 2;

die Datei: BauerC.html  beinhaltet folgende Informationen:
BauerC -> Pferde = 2;
       -> Schweine = 5;

Diese Dateien liegen im gleichen Ordner. Dieser wird ausgelesen und die Daten mit verschachtelten Schleifen aus den Dateien (pattern Matching) gefiltert.

Äussere Schleife liest die Bauern aus -> $bauer
Innere Schleife liest pro Bauer die Tiere aus ->$tier und die Anzahl der Tiere $amountTier

zum Schluß möchte ich eine Tabelle (html) Anzeigen wie folgt:

BauerA     BauerB     BauerC
Kühe      3          1          0
Pferde    2          5          2
Gänse     0          2          0
Schweine  0          0          5

Ich möchte um Zeit zu sparen das Ganze so effectiv wie möglich umsetzen.
d.h: nur einmal den Ordner auslesen -> array der Dateien und Dateien nur einmal öffnen und Daten filtern - das läuft bereits.

Mein Problem:
Ich schaffe es nicht die Daten in einer verschachtelten Struktur abzuspeichern (Hash von Hash) oder ähnlichem.

denn:

Zur Laufzeit ist die Anzahl der Dateien im Ordner nicht bekannt.
->Anzahl der Bauern unbekannt; ergibt sich aus dem Auslesen des Ordners

->Tiere und deren Anzahl ist auch nicht bekannt; ergibt sich beim Auslesen der Dateien

Falls jemand mein Problem verstanden hat wäre ich glücklich.
Petra

  1. hi,

    vielleicht so auf einen hash einlesen:
    my %attr;
    $attr{'huber'} = [3,2,5,0]; # 3 Schweine, 2 Hühner, 5 Pferde, 0 Gänse
    $attr{'meier'} = [1,1,1,1];
    $attr{'hansi'} = [0,0,0,0];

    Ausgabe so:
    foreach my $wirt( keys %attr ){
      print "$wirt hat $attr{$wirt}->[0] Schweine, $attr{$wirt}->[1] Hühner, ...\n";
    }

    Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
  2. Hallo Petra

    Ich habe folgendes Problem (einfach umschrieben):

    die Datei: BauerA.html beinhaltet folgende Informationen:
    BauerA -> Kühe = 3;
           -> Pferde = 2;

    die Datei: BauerB.html  beinhaltet folgende Informationen:
    BauerB -> Kühe = 1,
           -> Pferde = 5;
           -> Gänse = 2;

    die Datei: BauerC.html  beinhaltet folgende Informationen:
    BauerC -> Pferde = 2;
           -> Schweine = 5;

    zum Schluß möchte ich eine Tabelle (html) Anzeigen wie folgt:

    BauerA     BauerB     BauerC
    Kühe      3          1          0
    Pferde    2          5          2
    Gänse     0          2          0
    Schweine  0          0          5
    Mein Problem:
    Ich schaffe es nicht die Daten in einer verschachtelten Struktur abzuspeichern (Hash von Hash) oder ähnlichem.

    my %bauern;

    sub einlesen
    {
    my $bauer = irgendwoher();

    $bauern{$bauer} = {
    kuehe => 0,
    pferde => 0,
    gaense => 0,
    schweine =>0
    };

    .... jetzt die Tiere einlesen
    my $kuehe = getKuehe();
    ...
    my $schweine= getSchweine();

    $bauern{$bauer}->{kuehe} = $kuehe;
    $bauern{$bauer}->{schweine} = $schweine;

    }

    Ausgeben:

    while( my($bauer, $tiere) = each %bauern)
    {
    print "$bauer:";
    foreach(keys %$tiere)
    {
    print " $tiere->{$_}";
    }
    print "\n";
    }

    So ist allerdings die Tabelle genau andersrum wie du sie wolltest.

    Struppi.

    1. Hallo Struppi,

      [... nicht formatierter Code ...]

      Wah! perldoc perlstyle

      Grüße,
       CK

      --
      So, wie ein Teil ist, ist das Ganze.
      1. Hallo Christian Kruse

        Hallo Struppi,

        [... nicht formatierter Code ...]

        Wah! perldoc perlstyle

        Tja, dies Textarea ist nicht dafür geschaffen Code zu formatieren, eine Aufgabe für dich ;-)

        Da das nur ein ungetester Quickhack war (ich vergaß es dazu zu schreiben) hab ich den nicht im Editor gemacht.

        trotzdem haste ja recht.

        Struppi.