Forums Neueste Beiträge
 

Mehrdimensionales HashArray

12/07/2010 - 11:08 von Stefan Stark | Report spam
Hallo zusammen,

vieleicht kann mir jemand von euch das Brett vorm Kopf wegmachen.
Google konnte mir leider bisher auch nicht weiter helfen.

Ich habe ein 2-Dimensionales Hasharray das beim Einlesen aus einer Datei
gefüllt wird. An den 1ten Key komme ich problemlos ran nur beim 2ten
foreach hakts dann. Da der 2te Key (wie im Beispiel auch) dynamisch
erstellt wird brauche ich den Wert und den Inhalt.

Ich schnepsel das ganze mal aus nem größenen Zusammenhang als Beispiel
raus:

#!/usr/bin/perl
#
$DokId=1;
$DokX="Feld_1";
$Doku{$DokId}{"Znr"}="$DokId_Znr";
$Doku{$DokId}{"Counter"}++;
$Doku{$DokId}{$DokX}="$DokId"."_"."$DokX";
$DokId=2;
$DokX="Feld_1";
$Doku{$DokId}{"Znr"}="$DokId_Znr";
$Doku{$DokId}{"Counter"}++;
$Doku{$DokId}{$DokX}="$DokId"."_"."$DokX";
$DokId=3;
$DokX="Feld_2";
$Doku{$DokId}{"Znr"}="$DokId_Znr";
$Doku{$DokId}{"Counter"}++;
$Doku{$DokId}{$DokX}="$DokId"."_"."$DokX";
$DokId=4;
$DokX="Feld_3";
$Doku{$DokId}{"Znr"}="$DokId_Znr";
$Doku{$DokId}{"Counter"}++;
$Doku{$DokId}{$DokX}="$DokId"."_"."$DokX";

foreach $key (sort keys %Doku) {
print "$key ";
%DDD=$Doku{$key}; <<== ???
foreach $kkk (sort keys %DDD) { <<== ???
print "\t $kkk ";
}
}

Perl ist eine 5.10.1 auf einer AIX 5.3

Danke für eure Hilfe

Stefan
 

Lesen sie die antworten

#1 Wolf Behrenhoff
12/07/2010 - 11:47 | Warnen spam
On 12.07.2010 11:08, Stefan Stark wrote:
Hallo zusammen,

vieleicht kann mir jemand von euch das Brett vorm Kopf wegmachen.
Google konnte mir leider bisher auch nicht weiter helfen.

Ich habe ein 2-Dimensionales Hasharray das beim Einlesen aus einer Datei
gefüllt wird. An den 1ten Key komme ich problemlos ran nur beim 2ten
foreach hakts dann. Da der 2te Key (wie im Beispiel auch) dynamisch
erstellt wird brauche ich den Wert und den Inhalt.

foreach $key (sort keys %Doku) {
print "$key ";
%DDD=$Doku{$key}; <<== ???



Die linke Seite ist ein Hash, die rechte aber ein Skalar (nàmlich eine
Referenz auf einen Hash) - eine korrekte Zuweisung wàre z.B. %DDD =
%{$Doku{$key}}, das erzeugt allerdings eine (vmtl. unnötige) Kopie des
Hashes.

foreach $kkk (sort keys %DDD) { <<== ???
print "\t $kkk ";
}
}



Vielleicht solltest du einfach das so machen:

for $key (sort keys %Doku) {
my $innerHashRef = $Doku{$key};
for $kkk (sort keys %$innerHashRef) {
print "\t $kkk "
}
}

Und als Zusatzbemerkung: Wenn $DokID immer eine Zahl ist, solltest du
vielleicht ein Array von Hashrefs nehmen.

Mehr dazu in: perldoc perlref, perldoc perlreftut und vielleicht auch
perldoc perllol

- Wolf

Ähnliche fragen