IP zeilenweise auslesen
fred
- php
hi,
scheinbar stehe ich im Moment auf dem Schlauch
Ich hab eine Liste mit IP Adressen und den Pingzeiten
nun benötige ich aber nur die IP Adressen
Rohtext:
$rohIPs="
212.231.33.4 70 ms
213.229.35.21 158 ms
213.139.35.26 158 ms
213.239.37.19 133 ms
213.239.37.43 136 ms
213.239.37.44 136 ms
213.239.37.45 136 ms
213.239.37.46 138 ms
214.239.37.47 135 ms
";
Endergebnis soll also sein:
$IPs="
212.231.33.4
213.229.35.21
213.139.35.26
213.239.37.19
213.239.37.43
213.239.37.44
213.239.37.45
213.239.37.46
214.239.37.47
";
Kann mir bitte jemand helfen
Gruß
Fred
Hallo,
scheinbar stehe ich im Moment auf dem Schlauch
anscheinend!
$IPs='';
$x=explode("\n",$rohIPs);
for($i=0;$i<count($IPs);$i++){
$t=explode(' ',$x[$i],2);
$IPs.="\n".$t[0];
}
Gruß aus Berlin!
eddi
gudn tach!
wenn die geschwindigkeit eine untergeordnete rolle spielt, koennte man es auch mit einem einfach regulaeren ausdruck bewerkstelligen:
$IPs=preg_replace('/ .+/', '', $rohIPs);
prost
seth
Tachchen,
wenn die geschwindigkeit eine untergeordnete rolle spielt, koennte man es auch mit einem einfach regulaeren ausdruck bewerkstelligen:
$IPs=preg_replace('/ .+/', '', $rohIPs);
Fatal error: Call to undefined function preg_replace() in Command line code on line 1
nicht nur die Performance ist ein Kriterium, Perl-kompatible Reguläre Ausdrücke sind zuallererst Funktionen eines nicht zwingend aktiviertem Moduls...
Gruß aus Berlin!
eddi
Hallo eddi,
Fatal error: Call to undefined function preg_replace() in Command line code on line 1
nicht nur die Performance ist ein Kriterium, Perl-kompatible Reguläre Ausdrücke sind zuallererst Funktionen eines nicht zwingend aktiviertem Moduls...
Ja und? Wer die Extension nicht aktiviert, ist IMHO selbst Schuld. Es gibt bis auf wenige Szenarien (PHP auf Embedded-Systemen z.B.) absolut keinen Grund, die nicht zu aktivieren. Und zur Performance: Die PCRE-Lösung ist zumindest auf meinem System schneller:
---------------------- test1 -----------------------------
for ($ctr = 0; $ctr < 1000000; $ctr++) {
$IPs='';
$x=explode("\n",$rohIPs);
for($i=0;$i<count($IPs);$i++){
$t=explode(' ',$x[$i],2);
$IPs.="\n".$t[0];
}
}
---------------------- test1 -----------------------------
---------------------- test2 -----------------------------
for ($ctr = 0; $ctr < 1000000; $ctr++) {
$IPs=preg_replace('/ .+/', '', $rohIPs);
}
---------------------- test2 -----------------------------
Verwendet habe ich die gleichen Eingangsdaten, wie sie im Ausgangsposting angegeben wurden.
Messdaten Test1:
real 0m5.373s
user 0m5.256s
sys 0m0.072s
Messdaten Test2:
real 0m4.665s
user 0m4.580s
sys 0m0.048s
Ich denke, das ist recht eindeutig. Verwundert mich übrigens wenig, die PCRE-Engine ist in C geschrieben, während bei der anderen Lösung eine ganze Menge Kram in PHP hin- und hergeschoben wird.
Viele Grüße,
Christian
Hallo,
Ja und? Wer die Extension nicht aktiviert, ist IMHO selbst Schuld.
recht hast Du! Ich schimpfe auch immer, daß jeder selbst Schuld hat, der nicht mit Semaphoren arbeiten kann, weil in dem Falle standardmäßig nicht eingebunden, und damit nicht atomar Prozesse syncronisiert bekommt...
HALLO?!
Gruß aus Berlin!
eddi
Hallo eddi,
Ja und? Wer die Extension nicht aktiviert, ist IMHO selbst Schuld.
recht hast Du! Ich schimpfe auch immer, daß jeder selbst Schuld hat, der nicht mit Semaphoren arbeiten kann, weil in dem Falle standardmäßig nicht eingebunden, und damit nicht atomar Prozesse syncronisiert bekommt...
HALLO?!
Im Gegensatz zu Semaphoren werden beim Bauen von PHP PCRE jedoch standardmäßig aktiviert und man muss sie explizit mit --without-pcre-regex deaktivieren. Ferner sind Semaphore nichts, was man ständig brauchen könnte (wann muss man in PHP denn schon Prozesse synchronisieren? Selten), reguläre Ausdrücke kann man im Web-Umfeld (das bezieht sich nicht nur auf PHP, sondern auch auf Perl, Python, JavaScript, ...) so derart häufig brauchen, dass es Quatsch ist, sie zu deaktivieren (wie vorher schon gesagt: Ausnahmen existieren). Aber grundsätzlich von PCRE abzuraten, nur, weil sie in irgendwelchen Sonderfällen deaktiviert sein könnten, ist doch so, als ob man jedem sagen würde, er solle seine eigene Session-Engine für PHP schreiben, da die Session-Extension ja auch optional ist.
Viele Grüße,
Christian
Re:
Im Gegensatz zu Semaphoren werden beim Bauen von PHP PCRE jedoch standardmäßig aktiviert und man muss sie explizit mit --without-pcre-regex deaktivieren.
oder mit --disable-all --enable-was-man-wirklich-braucht
Aber grundsätzlich von PCRE abzuraten, nur, weil sie in irgendwelchen Sonderfällen deaktiviert sein könnten, ist doch so, als ob man jedem sagen würde, er solle seine eigene Session-Engine für PHP schreiben, da die Session-Extension ja auch optional ist.
Ich gebe Dir den Haken, an dem ich mich, auf diesen Schlagabtausch einlassend aufgehangen habe, gerne zurück: "Na und?"
Es ist leider (von mir zumindest) beobachteter Standard geworden, mit Datenbanken zu hantieren, sich aber nicht mal mit den Grundlagen, die die Programmiersprache PHP bietet, zu beschäftigen. Nichts außer pures PHP ist zunächst einmal selbstverständlich.
Insbesondere Dir sollte Dein Argument einer statistischen Wahrscheinlichkeit als vermuteter Programmierern fad aufstoßen.
self.close()
Gruß aus Berlin!
eddi
Hello,
self.close()
Gruß aus Berlin!
eddi
Müsste der Gruß nicht vor dem self.close() kommen?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo eddi,
self.close()
Nungut, wenn Du nicht darüber diskutieren willst, respektiere ich das.
Viele Grüße,
Christian
gudn tach!
wenn die geschwindigkeit eine untergeordnete rolle spielt, koennte man es auch mit einem einfach regulaeren ausdruck bewerkstelligen:
$IPs=preg_replace('/ .+/', '', $rohIPs);
prost
seth
Hallo seth,
Ich Danke Dir recht herzlich
Die Regex ist nicht nur elegant, sondern auch noch schneller
als die Variante von eddi
Wobei ich mich auch bei eddi bedanken möchte,
den der hat mich von (ich steh auf dem Schlauch) befreit :-)
Gruß
fred
Hallo Fred,
Ich hab eine Liste mit IP Adressen und den Pingzeiten
nun benötige ich aber nur die IP Adressen
Rohtext:
$rohIPs="
212.231.33.4 70 ms
214.239.37.47 135 ms
";
Trenne am Zeilenumbruch,
trenne Inhaltszeilen am Leerzeichen,
nimm vom Ergebnis jeweils nur das erste Element,
füge die erhaltenen Elemente mit einem Zeilenumbruch zusammen.
Endergebnis soll also sein:
$IPs="
212.231.33.4
214.239.37.47
";
Handwerkszeug:
Trennen mit explode(), Zusammenfügen mit implode(), Kontrollstruktur foreach, Kontrollstruktur if, Arrays.
Ich weiß ja nicht, was Du mit dieser Liste weiter vorhast, es erscheint mir jedoch praktischer, die IP-Adressen in einem Array zur weiteren Verarbeitung vorzuhalten als in einer Zeichenkette. Bei Bedarf läßt sich ja aus dem Array mit implode() problemlos in eine Zeichenkette erzeugen.
Freundliche Grüße
Vinzenz
Moin!
Falls die Liste vorher als Datei vorliegt und Du ein Linux/Unix/System hast oder die Gnu-Tools für windows nachinstallieren kannst ist der Einsatz des kleinen Progrämmchens 'cut' eine effiziente Möglichkeit:
$strListe=cut -d' ' -f1 'datei'
;
nach dem '=' und vor dem ';' steht tatsächlich jeweils ein backtick '`'
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®