Zeilennummer Fundstelle preg_match_all
hawkmaster
- php
0 hotti0 Christoph Jeschke0 Tom
Hallo zusammen,
ich durchsuche Dateien (php) Dateien nach dem Vorkommen bestimmter Variablen.
$fp = fopen($search_file_path, 'r');
$string = fread($fp, filesize($search_file_path));
fclose($fp);
if (preg_match_all("#text_arr\[(.*?)\]#", $string, $contents)){
foreach($contents[1] as $item){
echo "gefunden wurde $item <br>";
}
}
Das klappt soweit ganz gut.
Wie könnte man es nun noch hinbekommen, dass zusätzlich die Zeilennummer der Fundstelle ausgegeben wird?
vielen Dank und viele Grüße
hawk
hi,
Wie könnte man es nun noch hinbekommen, dass zusätzlich die Zeilennummer der Fundstelle ausgegeben wird?
Tja mein Lieber, in Perl steht die in $. (einer Standardvariablen). Sowas sollte PHP aber auch bringen.
Hotte
Guten Tag,
Wie könnte man es nun noch hinbekommen, dass zusätzlich die Zeilennummer der
Fundstelle ausgegeben wird?
So, wie du die Ergebnisse ermittelst, kann PHP die Zeilennummer nicht kennen, denn du liest die Datei als einen String ein. Iteriere lieber über die Dateizeilen und matche jede Zeile, dann kannst du auch die Nummer der Zeile mitführen und ausgeben.
Gruß
Christoph Jeschke
Hello,
Das klappt soweit ganz gut.
Wie könnte man es nun noch hinbekommen, dass zusätzlich die Zeilennummer der Fundstelle ausgegeben wird?
Eine Datei hat von Haus aus keine Zeilennummer, da sie klassisch als fortlaufender Bytestream dargestellt wird. Wenn Du nun Aufsetzpunkte in der Datei markieren willst, dann musst Du selber entscheiden, ob es sich um eine "Textdatei" handelt, die dann entsprechende Merker für das "Zeilenende" enthält.
Du könntest bei Verwendung einer solchen "Textdatei" also von vorne herein die Datei in "Zeilen" zerlegen, indem Du z.B. eine passende Einlesefunktion benutzt ( file(), fgets(), ... )oder aber für den Stream der Datei den passenden Seperator setzt.
http://www.php.net/manual/en/book.stream.php
http://www.php.net/manual/en/function.stream-get-line.php
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg