|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Zweidimensionales Array
|
Seitenanfang |
| Hallo, wir arbeiten z.Zt. an einem Script, das permanent zu einem Socket verbunden ist und eine Liste mit Daten auslesen soll. Diese Daten möchte ich später verwenden um bestimmte Aktionen durchzuführen, wie z.B: ... if ($idletime > XYZ) { print $ts2 "mptc ".c_id." ".p_id." } ...
z.Zt. verwenden wir folgende Schleife um die Datenliste Zeile für Zeile auszulesen. Die erste Zeile lassen wir dabei weg, da sie die Beschriftungen zu den einzelen Spalten enthält. Sobald der Server die Liste ausgegeben hat, sendet er ein "OK". Das tut er auch nach jedem anderen Befehl. ... print $ts2 "pl\n"; $answer = <$ts2>; $answer = <$ts2>; while ($answer ne "OK\r\n") { my @pl = split ("\t",$answer); my $p_id = $pl[0]; my $c_id = $pl[1]; my $ps = $pl[2]; my $bs = $pl[3]; my $pr = $pl[4]; my $br = $pl[5]; my $pl = $pl[6]; my $ping = $pl[7]; my $logintime = $pl[8]; my $idletime = $pl[9]; my $cprivs = $pl[10]; my $pprivs = $pl[10]; my $pflags = $pl[12]; my $ip = substr($pl[13],1,-1); my $nick = substr($pl[14],1,-1); my $loginname = substr($pl[15],1,-1); $answer = <$ts2>; } ...
Bislang haben wir die Aktionen mit in diese Schleife genommen, was aber oft zu Fehlern geführt hat. Ich habe von einem Bekannten das Stichwort "zweidimensionales Array" bekommen und glaube, dass das die Lösung sein könnte. Hat jemand einen Vorschlag, wie ich diese Schleife entsprechen ändern kann, sodass erst die komplette Liste eingelesen wird und ich dann mit den Daten arbeiten kann?
Datum: 11.05.2005-15:22

|
re: Zweidimensionales Array
|
Seitenanfang |
| Hi, ich hoffe folgendes hilft weiter bei deiner Recherche? [code] # Deklarieren my (@pl, $i, $ip, $ps, $bs, $pr, $br, $pl, $p_id, $c_id, $ping, $nick, $answer, $logintime, $idletime, $cprivs, $pprivs, $pflags, $loginname); # Daten erfassen while ($answer ne "OK\r\n") { if ($i == 5) { $answer = "OK\r\n"; } else { $answer = "1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\t13\t14\t15\t16"; $pl[$i] = $answer; $i++; } } # Daten liefern und was mit den Daten machen.... foreach (@pl) { # Daten holen ($ip, $ps, $bs, $pr, $br, $pl, $p_id, $c_id, $ping, $nick, $logintime, $idletime, $cprivs, $pprivs, $pflags, $loginname) = split /\t/, $_; # $_ liefert foreach # mal nicht angewendet, da Beispiel # $ip = substr($pl[13],1,-1); # $nick = substr($pl[14],1,-1); # $loginname = substr($pl[15],1,-1); # Daten ausgeben print "$ip, $ps, $bs, $pr, $br, $pl, $p_id, $c_id, $ping, $nick, $logintime, $idletime, $cprivs, $pprivs, $pflags, $loginname\n"; } [code]
Datum: 13.05.2005-17:08

|
re: Zweidimensionales Array
|
Seitenanfang |
| Hallo, ich kann nicht ganz erkennen wozu Du eine while-Schleife benötigst, es sei denn Du möchtest ausschließlich die Werte des letzten erfolgreichen Aufrufs von $ts2 in den vielen Variablen abspeichern. Wolltest Du dagegen alle Ausgaben von $ts2 speichern, so würde ich das mit einem hashofarrays (HoA) lösen, weil das so schön passt. Die jetzigen Variablennamen sind die zukünftigen Schlüssel. Die Werte sind danach dann referenzierte einfache Arrays, die die jeweiligen Aufrufe von $ts2 repräsentieren. Schau Dir das mal an. Ciao Ingo
Datum: 14.05.2005-13:51

|
|

|

|

|
 |

|

|
|