Matrix ausgeben
Rolf
- perl
0 LanX0 Frank Schönmann0 Marcus Budde0 Rolf
0 Dank Euch!
Rolf
Hallo,
eine Frage wo ich normalerweise ins Lehrbuch schauen würde, dies aber nicht zur Hand hab..., also: ich hab ein 2 dimensionales Array
$tab[0][0] wäre "links oben"
$tab[-1][-1] wäre "rechts unten" ---> so soll jedes Element auf den print:
0.0 ; 0.1 ; 0.2 usw....
1.0 ; 1.1 ; 1.2 ...
usw
Dabei steht die Anzahl der Zeilen und Spalten nicht von vornherein fest, soll also variabel sein.
Hat jemand die Lösung zur Hand?
Viele Grüße, Rolf
Hi Rolf
Es gibt eleganteres Perl aber mit
print join(" ; ",@array);
druckst du eine Zeile aus mit den arrayelementen aus!
jetzt noch über die Zeilen iterieren!
Bye Rolf
hi!
eine Frage wo ich normalerweise ins Lehrbuch schauen würde, dies
aber nicht zur Hand hab..., also: ich hab ein 2 dimensionales
Array
$tab[0][0] wäre "links oben"
So sieht doch kein zweidimensionales Array in Perl aus. Perl kann
mehrdimensionale Arrays IMHO nur durch Referenzen erzeugen, also in
deinem Fall $tab[0]->[0].
Hat jemand die Lösung zur Hand?
LanX hat dir ja schon einen Hinweis gegeben. Komplett:
map { print join(';', @$_), "\n" } @tab;
bye, Frank!
Hi,
So sieht doch kein zweidimensionales Array in Perl aus. Perl kann
mehrdimensionale Arrays IMHO nur durch Referenzen erzeugen, also in
deinem Fall $tab[0]->[0].
Es gibt mehrere Möglichkeiten in Perl Arrayelemente zu referenzieren. das mit $tab[0][0] ist ebenfalls gültig.
Folgende Beispiele ist lauffähig:
@tab = (["0.0","0.1","0.2","0.3"],["1.0","1.1","1.2","1.3"],["2.0","2.1","2.2","2.3"]);
(das hier soll nur mal als Beispiel-Array dienen)
Die simple Variante:
for ($i = 0; $i < @tab; $i++)
{
for ($j = 0; $j < @{$tab[$i]}; $j++)
{
print $tab[$i][$j]." ; ";
}
print "\n";
}
Is aber wegen des Semikolons auch hinter dem letzten Feld nicht so toll, könnte man natürlich abfangen aber einfacher gehts mit LanX Vorschlag:
for ($i=0; $i < @tab; $i++)
{
print join(" ; ",@{$tab[$i]})."\n";
}
Wobei "join" eine Funktion ist, die Arrayelemente zu einem String verbindet. Das Erste Argument gibt den String an, durch den die Felder getrennt werden sollen, das Zweite ist das Array.
Am effizientesten ist Franks Einzeilenlösung;
map { print join(';', @$_), "\n" } @tab;
Wobei "map" eine Anweisung, oder einen Anweisungsblock für jedes Element eines Arrays ausführt. Da in Perl ein zweidimensionales Array ein Array von Arrays (Genauer Array-Referenzen) ist wird jeweils als Element @{$tab[$i]} an den Anweisungsblock übergeben.
Ich hab das jetzt noch mal so ausführlich beschrieben, da Rolf schrieb er habe kein Lehrbuch zur Hand und der Einzeiler eventuell für Ihn etwas undurchschaubar sein könnte.
Gruß
Marcus
Hi Marcus;
Ich hab das jetzt noch mal so ausführlich beschrieben, da Rolf schrieb er habe kein Lehrbuch zur Hand und der Einzeiler eventuell für Ihn etwas undurchschaubar sein könnte.
Herzlichen Dank! Ich hab den Schnippel vom Frank eingebaut und der tut. Warum - das lese ich nächste Woche nach *g
In Perl lerne ich wahrscheinlich nie aus; viele Grüße, Rolf
PS: Mit Büchern ists so ein Ding: Entweder die liegen noch in de Buchhandlung oder beim Kollegen auf dem Tisch oder Zuhause (im Falle Du bist auf Arbeit) ... und wenn Du eins gekauft hast isses in 2-3 Monaten total veraltet. Hmm. Trifft nicht ganz für PERL Bücher zu.
Naja, zum Glück gibts dieses Forum !
Dank Euch, geht prima!
Viele Grüße, Rolf
PS: Zu bewunderen auf http://i-netlab.de/cgi-bin/webtable.cgi