Schrift
[thread]11189[/thread]

Verschachtelte foreach-Schleifen

Leser: 5


<< >> 3 Einträge, 1 Seite
Gast Gast
 2008-01-26 01:47
#105179 #105179
Hallo,
ich habe zwei Arrays mit Hashes. Das zweite Array enthält quasi Unterdaten des ersten.
Nun möchte ich mittels zwei verschachtelten foreach-Schleifen die Daten abarbeiten.

Also meine beiden Listen:
Code (perl): (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
my @stationsliste=
(
        {
                desc            => "Station Osnabrück (OKCC)",
                name            => "Osnabrück",
                kurzname        => "OKCC",
        },
        {
                desc            => "Station Osnabrück/Verkehrsstation (OKVT)",
                name            => "Osnabrück",
                kurzname        => "OKVT",
        }
)

my @wetterdaten = 
(
                {
                        desc    => "Stickstoffmonoxid",
                        unit    => "µg/m³",
                        getdesc => "NO",
                        filename=> "stickstoffmonoxid.csv",
                        stations=> "OKCC OKVT",
                },
                {
                        desc    => "Stickstoffdioxid",
                        unit    => "µg/m³",
                        getdesc => "NO2",
                        filename=> "stickstoffdioxid.csv",
                        stations=> "OKCC OKVT",
                }
)


Nun würde ich auch in der zweiten Schleife noch auf die Daten der ersten Zugreifen.
Code (perl): (dl )
1
2
3
4
5
foreach (@stationsliste)
{
   print "Station ". $->('desc') . " wird abgefragt...\n";
      foreach (@wetterdaten)
        {

Gibt es dazu irgendeine spezielle Syntax um in meiner "wetterdaten"-Schleife auf die der "stationsliste" zuzugreifen? Oder muss ich in der ersten Schleife die gewünschten Daten in eine neue Variable kopieren?

Gruß
Thomas
Linuxer
 2008-01-26 02:16
#105180 #105180
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

du solltest die Laufvariable der Schleife benennen.

Schema:
Code (perl): (dl )
1
2
3
4
5
for my $station ( @stationen ) {
  for my $wetter ( @wetter ) {
    print "$station : $wetter\n";
  }
}


Damit kannst Du dann in der "Wetter"-Schleife auf die Stationsdaten der "Station"-Schleife zugreifen. Bei zwei AoH sind $station und $wetter dann Referenzen auf das jeweilige Hashelement.

Doku: perldoc perldsc
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-01-26 23:25
#105221 #105221
Linuxer+2008-01-26 01:16:05--
Damit kannst Du dann in der "Wetter"-Schleife auf die Stationsdaten der "Station"-Schleife zugreifen. Bei zwei AoH sind $station und $wetter dann Referenzen auf das jeweilige Hashelement.


Ah, Danke.
Dass bei einem Array of Hashes die Laufvariable eine Hashreferenz ist habe ich in den Dokus vermisst, bzw. nicht drauf gekommen.

In meinem ersten Post war auch noch ein Klammerfehler (runde anstatt geschweift).
Aber so funktioniert es:
Code (perl): (dl )
1
2
3
4
5
6
7
foreach my $station (@stationsliste) {
   print "Station ". $station ->('desc') . " wird abgefragt...\n";
   foreach my $wetterdat (@wetterdaten)
   {
      print "\nHole Daten fuer " . $wetterdat->{'desc'} . "...\n";
.
.


Thomas
<< >> 3 Einträge, 1 Seite



View all threads created 2008-01-26 01:47.