Thread Foreach HASH in HASH (6 answers)
Opened by Oliver at 2020-01-31 20:38

Gast Oliver
 2020-01-31 20:38
#191238 #191238
Moin
...und schonmal Danke für das Lesen und Helfen :-)

Folgende Datenstruktur (Auszug)
Das sind zwei ineinander verschachtelte HASHs:
%DATA ist ein HASH, das natürlich Pärchen enthält. Diese Pärchen sind der "GruppenName" und ein weiters HASH, das wiederum den "Parameter" und den "WERT" enthält.
Das ähnelt stark dem Aufbau einer INI-Datei. Soll es auch!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
my %Data = ("FILES", {"CONFIGFILE", "/shares/www/cgi-bin/data.ini",
"DEBUG","NO",
"ERRORLOG","YES",
"DAILYDEBUG","NO",
"ERRORLOGFILEPATH","/shares/www/cgi-bin/logs/",
"COMMANDFILE","/shares/www/cgi-bin/commands.dat",
"DAILYDEBUGFILEPATH","/shares/www/cgi-bin/logs/",
"BACKUPFILEPATH","/shares/www/cgi-bin/logs/"},

"GENERAL", {"LASTDEVICE","30",
"TIMEOUTDEVICE", "1",
"TIMEOUTGETURL", "1",
"MAXIMUM_SEND_ATTEMPTS","5"},

"DEVICE_0", {"NAME","Flur EG",
"DEVICEID","0",
"IP","192.168.0.111",
"LASTTRYSUCCESSFUL","NO",
"LASTERROR","",
"LASTRESPONSE","0",
"LASTRESPONSETIME","",
"ERRORCOUNTER","0",
"CONNECTIONERRORCOUNTER","0",
"CONNECTIONTRYCOUNTER","0",
"CONNECTIONSUCCESSFULCOUNTER","0",
"ERRORSAFTERLASTSUCCESS","0"},

"DEVICE_1", {"NAME","WC",
"DEVICEID","1",
"IP","192.168.0.112",
"LASTTRYSUCCESSFUL","NO",
"LASTERROR","",
"LASTRESPONSE","0",
"LASTRESPONSETIME","",
"ERRORCOUNTER","0",
"CONNECTIONERRORCOUNTER","0",
"CONNECTIONTRYCOUNTER","0",
"CONNECTIONSUCCESSFULCOUNTER","0",
"ERRORSAFTERLASTSUCCESS","0"},

"DEVICE_2", {"NAME","Arbeitszimmer",
"DEVICEID","2",
"IP","192.168.0.113",
"LASTTRYSUCCESSFUL","NO",
"LASTERROR","",
"LASTRESPONSE","0",
"LASTRESPONSETIME","",
"ERRORCOUNTER","0",
"CONNECTIONERRORCOUNTER","0",
"CONNECTIONTRYCOUNTER","0",
"CONNECTIONSUCCESSFULCOUNTER","0",
"ERRORSAFTERLASTSUCCESS","0"},
)


Jetzt würde ich gerne eine Tabelle ausgeben

Quote
GruppenName1 Parameter1 Wert1
GruppenName1 Parameter2 Wert2
GruppenName1 Parameter3 Wert3
GruppenName1 Parameter4 Wert4
GruppenName1 Parameter5 Wert5
GruppenName2 Parameter1 Wert1
GruppenName2 Parameter2 Wert2
GruppenName2 Parameter3 Wert3
GruppenName2 Parameter4 Wert4
GruppenName2 Parameter5 Wert5
.....


Klingt (und ist wohl eine Aufgabe für foreach. Ich verzweifle aber gerade an der Verschachtelung :-( Und da wäre es super, wenn mir jemand auf die Sprünge helfen könnte.

Mein Code-Ansatz wie folgt
Code: (dl )
1
2
3
foreach $Gruppe (keys %Data) { 
print $Gruppe . " " . $Data{$Gruppe} . "\n";
};


Die Ausgabe ist bei obigem Code

Quote
GruppenName HASH(0x55892bc68418)
GruppenName HASH(0x55892bc5f5b0)
GruppenName HASH(0x55892bc69138)
....


Soweit so Gut! Eine Verschachtelung von foreach bekomme ich aber nicht hin!
Code: (dl )
1
2
3
4
5
foreach $Gruppe (keys %Data) { 
foreach $Parameter (keys %Data{Gruppe}) {
print $Gruppe . " " . $Parameter . " " . $Data{$Gruppe}{$Parameter} . "\n";
};
};


Das geht so nicht :-(
Hat jemand eine Idee?

Besten Dank!
Last edited: 2020-01-31 22:13:48 +0100 (CET)

View full thread Foreach HASH in HASH