Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie danych z pliku, preg_match
Forum PHP.pl > Forum > PHP
Blace
Witam,

czy może ktoś pomóć, mam taki pliczek:

[04/sty/2007:01:52:46 +0100] modul: war-load stan: przeciazenie aktualny load: 215 prog: 020
[05/sty/2007:19:29:52 +0100] modul: war-ping stan: zbyt duze obciazenie hosta: ftp.szczecin.pl 0.338ms prog: 0 ms zbyt duze obciazenie hosta: heat.szczecin.pl 0.314ms prog: 0 ms



i potrzebuje za pomocą wyrażen reg wyciągnąc tylko tą częsc czesc pliku:

[04/sty/2007:01:52:46 +0100] modul: war-load stan: przeciazenie aktualny load: 215
[05/sty/2007:19:29:52 +0100] modul: war-ping stan: zbyt duze obciazenie hosta: ftp.szczecin.pl 0.338ms prog: 0 ms zbyt duze obciazenie hosta: heat.szczecin.pl 0.314ms





ogólnie chodzi o to zeby odcinał z każdego wiersza tekst który zaczyna sie od slowa prog,


Wie ktoś może jak to zrobić?
Liko
  1. <?php
  2.  
  3. $sLogs = '[04/sty/2007:01:52:46 +0100] modul: war-load stan: przeciazenie aktualny load: 215 prog: 020
  4. [05/sty/2007:19:29:52 +0100] modul: war-ping stan: zbyt duze obciazenie hosta: ftp.szczecin.pl 0.338ms prog: 0 ms 
  5. zbyt duze obciazenie hosta: heat.szczecin.pl 0.314ms prog: 0 ms';
  6.  
  7. $sLogs = join(array_map(create_function('$s', 'return substr( $s, 0, strpos( $s, 'prog' ) );'), explode( "\n", $sLogs )), "\n");
  8.  
  9. var_dump($sLogs);
  10. ?>


+ explode" title="Zobacz w manualu PHP" target="_manual - rozbija łańcuch znaków na tablicę wg. znaków nowej lini;
+ create_function" title="Zobacz w manualu PHP" target="_manual - tworzy dynamicznie funkcję, która jest wykorzystywana w następnej funkcji;
+ strpos" title="Zobacz w manualu PHP" target="_manual - zwraca pozycję w łańcuchu znaków wystąpienia łańcucha "prog";
+ substr" title="Zobacz w manualu PHP" target="_manual - odcina podaną ilość znaków;
+ array_map" title="Zobacz w manualu PHP" target="_manual - wykonuje podaną funkcję na każdym elemencie tablicy;
+ join" title="Zobacz w manualu PHP" target="_manual - łączy wszystko znowu w łańcuch znaków;

Nie wiem czy takie rozwiązanie jest szybsze niż użycie wyrażeń regularnych.

  1. <?php
  2.  
  3. $sLogs = '[04/sty/2007:01:52:46 +0100] modul: war-load stan: przeciazenie aktualny load: 215 prog: 020 ms
  4. [05/sty/2007:19:29:52 +0100] modul: war-ping stan: zbyt duze obciazenie hosta: ftp.szczecin.pl 0.338ms prog: 0 ms 
  5. zbyt duze obciazenie hosta: heat.szczecin.pl 0.314ms prog: 0 ms';
  6.  
  7. $sLogs = preg_replace( '/(.*)(prog(.*))/i', '$1', $sLogs );
  8.  
  9. print($sLogs);
  10. ?>
Blace
dzięki Liko smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.