Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichenkette aufsplitten, aber wie??



Maruu
18-03-2003, 07:39
Hallo!

Hab hier ein mehr oder weniger großes Problem.
Ich hab ein Programm namens cnistnet und will dessen ausgabe in
ein Array oder Variablen umleiten. Die Ausgabe des Programms
sieht folgendermaßen aus:

cnistnet -a 192.168.1.5 192.168.6.55 --delay 7.000 --bandwidth 57
cnistnet -a 192.1.1.1 192.168.44.45 --delay 2.000 --bandwidth 5555
cnistnet -a 192.168.2.52 192.168.4.54 --delay 5.500

Nun ist es so das ich gerne die IP´s, den Wert nach delay und nach Bandwidth
in ein Array speichern möchte. es variert aber das heisst die Stellen
die eine IP lang ist kann ja 1.1.1.1 oder 111.111.111.111 im längsten fall sein.
Außerdem muss nicht immer beides also bandwidth und delay angegeben sein
es kann auch nur eins von beiden wie oben angegeben sein.
Wie im Beispiel ersichtlich ist die Ausgabe mehrzeilig das heisst falls
es sowas gibt dann ein Mehrdimennsionales Array, oder??
Weis jemand wie man das anstellen könnte???

MFG

Hannes Bischof

elrond
18-03-2003, 08:36
die Ip steht immer an der selben stelle, einfach am leerzeichen splitten und die pos 3/4 verwenden.

für delay würde ich mittels $arr=split("delay",string) splitten und dann alles bis zum nächsten leerzeichen bzw zeilenende benutzen, bandwidth dito.

Maruu
18-03-2003, 08:41
Hallo!

Erstmal danke für den Tipp.
Was meinst du mit pos 3/4 verwenden??
Und nochwas wie splitte ich bis zum nächsten
Leerzeichen??

MFG

Hannes Bischof

elrond
18-03-2003, 08:44
versuch's so:

$str="cnistnet -a 192.168.1.5 192.168.6.55 --delay 7.000 --bandwidth 57";
$arr=split(" ",$str);
echo "erste IP:".$arr[2]." zewite IP:".$arr[3];
echo "<br>";

$arr=split("delay",$str);
$arr=split(" ",$arr[1]);

echo "delay: ".$arr[1]."<br>";

$arr=split("--bandwidth",$str);
$arr=split(" ",$arr[1]);

echo "bandwidth: ".$arr[1];


Ausgabe:
erste IP:192.168.1.5 zewite IP:192.168.6.55
delay: 7.000
bandwidth: 57

Maruu
18-03-2003, 08:54
Hallo!

Danke das hilft mir sehr weiter.
Dann spiel ich mal ein bisschen damit rum.

THX

Hannes

PS: wie könnte man das noch lösen da es ja mehrere Zeilen sind, gibts sowas
wie ein mehrdimensionales Array???
Mit grep -c [string] kann ich zählrn wieviel Zeilen die Ausgabe hat so könnte
ich schonmal immer eins addieren um die Zeilen durchzumachen!

elrond
18-03-2003, 09:40
du kannst die ausgane in eine datei umleiten und dann mit fer funktion file() einlesen. du erhälst einn array mit jeweils einem eintrag pro zeile:

$zeil_arr=file($datei);
for ($i=0;$i<count($zeil_arr);$i++) {
$str=$zeil_arr[$i];
... und dann wie gehabt... :D
}

Maruu
18-03-2003, 10:11
Hallo!

Zält count die Zeilen in einer Datei??

MFG

Hannes Bischof

elrond
18-03-2003, 10:30
mit count($arr) wird die anzahl der arrayelemente ermittelt

Maruu
18-03-2003, 10:36
Ahhh habs verstanden.
Danke müsste jetzt alles gehen.


BIG THX

MFG

Hannes Bischof

Maruu
01-04-2003, 14:00
Hallo!

Hab nun ein neues Problem. Hab ne Variable in der ungefähr folgendes drin steht:

0 0 0 0 5346 0 564 8 6

so nun will ich ein Array haben in dem folgende Elemente sind:
0,0,0,0,5346,0,564,8,6
die leerzeichen zwischen den Zahlen können variieren aber es ist immer min. 1 Leerzeichen dazwischen. Kann man das irgendwie aufteilen???

MFG

Hannes Bischof

elrond
01-04-2003, 14:03
dein neues problem ist dein altes problem... :rolleyes:

versuch einfach am leerzeichen zu splitten $arr=split(" ","0 0 2 8");

Maruu
01-04-2003, 14:08
Hallo!

Habs schon probiert aber dann bekomm ich ein array wo 5 elemente mit leerzeichen gefüllt sind dann die 0 dann wieder 3 Leerzeichen usw...
Ich will halt das nur die Zahlenketten jeweils ins arry kommen!
MFG

Hannes Bischof

elrond
01-04-2003, 14:15
$arr=preg_split("/\s{1,}/","0 0 3 5 8 12 23");


das funxt.
wenn du wissen willst wie solltest du dich über reguläre Ausdrücke informieren. Ich habe hier oben die von perl benutzt.:cool:

Maruu
01-04-2003, 14:22
hmm nicht ganz, er speichert mir nun die Zeichenkette in das erste element des Arrays.

MFG

Hannes Bischof

PS: werd erst morgen wieder dazu kommen hier im Forum zu antworten! THX

elrond
01-04-2003, 14:26
in dem Ausdruck preg_split("/\s{1,}/","0 0 3 5 8 12 23") hat das Forum den backslash vor dem 's' gefressen...


:o

Maruu
02-04-2003, 12:54
Böses Forum ißt da einfach so Zeichen weg*g*
Hat funktioniert. Danke!!!!

THX

MFG

Hannes Bischof