Peter: Mehrdimensionalen Array ausgeben mit einer schleife

Hallo Leute,

ich habe ein kleines Problem, vielleicht könnt ihr mir ja helfen ;-)

Folgendes.

ich habe folgenden Datentyp: $verzeichniss[$count]->[$anzahl];

Ich habe also mehrere Verzeichniss, diese referenzieren einen anderen Array in dem stehen n Elemente. Nun möchte ich z.B.
jeweils eine Zeile in jedem Verzeichniss finden und diese ausgeben.
Gedacht hatte ich mir das wie folgt:

for ($count =0; $count < $a; $count ++) {
    for ($count2=0; $count < $b; $count2++) {
        print $verzeichniss[$count]->[$count2];
        }
}

$a und $b bekomme ich aus einer anderen Prozedur, diese sollen mir
jeweils die länge der beiden Elemente sagen. Leider funktioniert das
nicht...

Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
vielleicht schöneren Weg?

DAnke!!!!

  1. Hallo Peter,

    $a und $b bekomme ich aus einer anderen Prozedur, diese sollen mir
    jeweils die länge der beiden Elemente sagen. Leider funktioniert das
    nicht...

    Was funktioniert denn nicht? Die Ausgabe, die Bestimmung der Länge der Elemente, die Übergabe von $a und $b?
    Was macht Dein Skript bis jetzt? Was gibt es bisher aus?
    Läuft Deine Skript mit 'use strict' und -w? Wenn ja, aber auch wenn nein, gibt es irgendwelche Fehlermeldungen während des Compilierens oder zur Laufzeit?
    Die Fragen sind nicht böse gemeint, aber im Moment sehe ich nicht nur, daß Du in Deiner zweiten Schleife als Abbruchbedingung '$count < $b' agegeben hast, statt wie ich vermute korrekterweise '$count2 < $b'.

    Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
    vielleicht schöneren Weg?

    Elemente 0 - $a von @verzeichniss in $verz weitergeben

    foreach $verz (@verzeichniss[0..$a]) {
       # dito.
       foreach $elem (@{$verz}[0..$b]) {
          print $elem;
       }
    }

    Ich hoffe das hilft Dir weiter, und ist elegant genug :-)

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

    1. Hi Alex,

      Kann mir bitte jemand helfen? Oder kennt ihr einen anderen,
      vielleicht schöneren Weg?

      Elemente 0 - $a von @verzeichniss in $verz weitergeben

      foreach $verz (@verzeichniss[0..$a]) {
         # dito.
         foreach $elem (@{$verz}[0..$b]) {
            print $elem;
         }
      }

      Das ist der Grund, warum ich lieber mit $var-Referenzen arbeite ;)

      foreach $verz (@verzeichnisse[0..$a])
      {
      foreach (@$verz[0..$b])
        { print; }
      }

      Meiner Meinung nach schöner, wegen des fehlenden @{}

      mfg
      CK1

      1. Hallo Christian,

        foreach $verz (@verzeichnisse[0..$a])

        »»  {
        »»  foreach (@$verz[0..$b])

        { print; }

        »»  }

        Meiner Meinung nach schöner, wegen des fehlenden @{}

        Das ist natürlich Geschmackssache. ;-) Mir gefällt @{} ausgesprochen gut, vor allem weil es die Zuordnung schön erkennen lässt:
          @{$myhash->{'key'}}

        Noch schöner als oben ist natürlich:

        foreach (@verzeichniss[$start_a..$end_a]) {
           foreach (@{$_}[$start_b..$end_b]) { print; }
        }

        *bg*

        Gruß AlexBausW

        Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

    2. Hi,

      Läuft Deine Skript mit 'use strict' und -w?

      vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.

      Diese beiden Variablen werden - ähnlich $_ - magisch von gewissen Operationen gefüllt; insbesondere von sort. Sie anderweitig zu verwenden ist zumindest bedenklich, wenn nicht sogar gefährlich.

      Cheatah

      1. Hallo Cheatah,

        vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.
        Diese beiden Variablen werden - ähnlich $_ - magisch von gewissen Operationen gefüllt; insbesondere von sort. Sie anderweitig zu verwenden ist zumindest bedenklich, wenn nicht sogar gefährlich.

        Das habe ich mir auch gedacht. Aber beim Test mit 'use strict;', hat mir Perl keine einzige Warnung ausgespuckt, weder bei einer einfachen Zuweisung an $a, noch bei einer Deklaration von $a mit my !??
        Deswegen habe ich dazu nichts weiter gesagt. Aber Du hast natürlich recht, daß man diese beiden Variablen besser nicht selbst benutzen sollte :-)

        Gruß AlexBausW

        Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

        1. Hi,

          vermutlich nicht, denn sonst hätte Perl wegen der Verwendung von $a und $b vermutlich eine Warnung ausgespuckt.

          Das habe ich mir auch gedacht. Aber beim Test mit 'use strict;', hat mir Perl keine einzige Warnung ausgespuckt,

          für Warnungen ist der -w Switch verantwortlich ;-)

          Cheatah

  2. hi!

    ich habe folgenden Datentyp: $verzeichniss[$count]->[$anzahl];
    Ich habe also mehrere Verzeichniss, diese referenzieren einen
    anderen Array in dem stehen n Elemente. Nun möchte ich z.B.
    jeweils eine Zeile in jedem Verzeichniss finden und diese
    ausgeben.
    Gedacht hatte ich mir das wie folgt:

    for ($count =0; $count < $a; $count ++) {
        for ($count2=0; $count < $b; $count2++) {
            print $verzeichniss[$count]->[$count2];
            }
    }

    Was willst du genau? Damit gibts du nur sämtliche Einträge deiner
    referenzierten Listen aus - zumindest wenn $a und $b die Länge dieser
    Listen enthalten. Das kannst du auch so schreiben:
      print map { @$_ } @ary;

    Wenn du nur die Elemente ausgeben lassen willst, die auf einen
    bestimmten regulären Ausdruck passen, geht das etwa folgendermaßen:
      print grep /ausdruck/, map { @$_ } @ary;

    Und wenn du was anderes willst, dann musst du dich schon klarer
    ausdrücken und eine genauere Fragestellung bieten :)

    bye, Frank!