2010-12-13 5 views
2

Wie schneide ich ein Stück Text aus einer Textdatei in PHP. Zum Beispiel möchte ich die Zeilen 0-50 herausnehmen und in eine Zeichenfolge umwandeln. Vielleicht sogar eine HTML-Formatierung. Ich weiß schon, welche Linien ich ausschneiden muss, ich weiß einfach nicht, wie ich sie auswählen und zu einer Schnur zusammenfügen soll.PHP - Wie schneide ich einen Zeilenblock in einem Textdokument aus?

+0

Wie sind Ihre Linien abgegrenzt? Harte Rückkehr? Wenn dies der Fall ist, können Sie Ihre Zeichenfolge in ein Array explodieren und dann die ersten 50 (0-49) Zeilen aus dem Array nehmen. – CrowderSoup

+0

Hier ist eine sehr ähnliche Frage, wie Sie die ersten 20 Zeilen einer Textdatei erhalten: http://stackoverflow.com/questions/4410077/remove-all-lines-except-first-20-using-php/4410128#4410128 –

+0

@Surreal das ist eine andere Frage, wenn es darum geht, arbirtrary Blöcke aus dem Text – Gordon

Antwort

1

explodieren auf neue Zeile und geben Sie die Array-Werte von 0-50.

+0

explodieren ist nicht sehr effizient, wenn Sie große Dateien haben. Neben dem möglichen Geschwindigkeitsproblem benötigen Sie 2x mehr Speicher. Es ist besser, zeilenweise mit fgets zu lesen oder die Funktion file() zu verwenden, wie es Oliver A. vorgeschlagen hat. –

+0

schlag dich dazu. ;) – DampeS8N

3

Verwenden Sie die Datei ($ filename). Das Ergebnis ist ein Array, bei dem jedes Element eine Zeile aus Ihrer Datei ist. Probe:

$lines = file("foo.txt"); 
//extract desired lines 
$lines = array_slice($lines,19,21); 
$string) implode("\n",$lines); 
+0

http://php.net/manual/en/function.file.php –

+1

ja, du hast Recht. Überlasse es mir, es zu überdenken. – DampeS8N

0

Weniger speicherintensiven Ansatz:

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = implode(iterator_to_array($fileIterator)); 

oder als Alternative

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = ''; 
foreach ($fileIterator as $currentLine) { 
    $firstFiftyLines .= $currentLine; 
} 

Wenn Sie andere Linien benötigen, zum LimitIterator die zweite und dritte Argument ändern. Die erste startet den Offset, die zweite Iteration (in diesem Kontext die zu lesenden Zeilen).

Kennzeichnung Antwort CW weil Frage (und Antwort) ein Duplikat Read a file from line X to line Y?

1

Öffnen Sie die Datei mit fopen ist, lesen Sie zuerst 50 Zeilen mit fgets.

Dies ist effizient, auch wenn Sie die ersten 50 Zeilen einer großen Datei lesen müssen.

Verwandte Themen