verschachtelte Datenstrukturen
Petra
- perl
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
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
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.
Hallo Struppi,
[... nicht formatierter Code ...]
Wah! perldoc perlstyle
Grüße,
CK
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.