fred: IP zeilenweise auslesen

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

  1. 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

    1. 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

      1. 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

        1. 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

          --
          "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
          1. 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

            1. 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

              --
              "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
              1. 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

                1. 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

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau

                2. Hallo eddi,

                  self.close()

                  Nungut, wenn Du nicht darüber diskutieren willst, respektiere ich das.

                  Viele Grüße,
                  Christian

                  --
                  "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
      2. 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

  2. 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

  3. 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®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development