perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




10.02.2012 / 09:21

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragZweidimensionales 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

Beitragre: 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

Beitragre: 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

-






-
-