Mehrere Textblöcke aus Textdatei lesen und je in separate datei schreiben

Hallo Forum,

Ich habe eine Textdatei, die mehrere Textblöcke beinhaltet, die ich gerne in separate Textdateien speichern möchte.

Die Blöcke sind mit folgenden Trennern voneinander getrennt:

  1. „Blatt 1“
  2. „Blatt 2“
  3. „Blatt 3“
  4. „Blatt 4“
    etc…es kann so weiter gehen.

Bisher dachte ich das ich folgenden Code nutzen könnte.

$content_all = join("", file(„MeineDatei“));
$strg_n = "BLATT ";

 $start =  strpos($content_all, $strg_n." 1") + 7;
 $end   = strrpos($content_all, $strg_n." 2") - 2;
 
 $textausschnitt=substr($content_all, $start, $end-$start);
 
 echo $textausschnitt;

Ich habe es mal auf einen Textabschnitt beschränkt.
Dennoch funktioniert der Code nicht.

Gibts eine Möglichkeit es besser zu machen?

Hi

Es sieht so aus, als ob Du in Deinem TXT-File die Seiten durch den Text ‚Blatt X‘ trennst.
Durch das ‚-7‘ denke ich, daß nur 1-stellige Seitenzahlen zu erwarten sind.
Das +2 interpretiere ich als Übersprung des CR+LF.
Nach meinem Denken sollte Dein Code halbwegs funktionieren.

Sind die Zeichen VOR der Seitenzahl definitiv ein Space, oder könnte es auch ein 00 (statt 32) sein? (oder gar 255, müsste ebenfalls ein leeres Zeichen sein)
Könnte man dieses ‚Leer‘-Zeichen per ‚?‘ (einzelnen, beliebiges Zeichen) erfassen?
Was machst Du bei mehr als 9 Seiten?

MfG

Hi,

vielen Dank für die schnelle Reaktion.
Zunächst einmal ist Deine Vermutung korrekt das die einzelnen Seiten durch den Text „Blatt X“ getrennt sind. Ich bekomme diese Textdatei genauso geliefert und darf es nicht verändern.

Ja, es sind tatsächlich nur einstellige Seitenzahlen zu erwarten. Mehr als 9 Seiten werden es wohl nie.

Die Zeichen nach dem „Blatt x“ sind ebenfalls Leerzeichen.

Ich hatte es erstmal so versucht aber aus irgendeinem Grund funktioniert es nicht so richtig.

$content_all = join("", file(„MeineDatei“));
$strg_n = "BLATT ";

$s=1;

for ($i=1; $i

Problem dabei ist das in den folgenden Blättern 2 und 3 immer jeweils ein Teil von Blatt 3 in Blatt 2 erscheint und einmal ein Teil von dem Rest der Datei ganz unten in Blatt 3.

Dabei will ich wirklich nur die Abschnitte

Zwischen der ersten Zeile und Blatt 1
Zwischen Blatt 1 und Blatt 2
Zwischen Blatt 2 und Blatt 3

Insgesamt sollen daraus also 3 Blätter werden.

Aber irgendwie funktioniert das nicht.

Ich habe es nun teilweise hinbekommen, allerdings nicht mit der ursprünglichen Formatierung des Strings aus der Textdatei.

Da ich hier alles in ein Array schreibe, werden die ausgeschnittenen Texte nun in einer Zeile weggeschrieben.

Ich möchte aber gerne die ursprüngliche Formatierung aus der Textdatei beibehalten.

Hat jemand eine Idee wie ich das ermögliche?

Bisher sieht mein Code so aus:

<?php error_reporting(E_ALL);<br />// Pfad und Dateiname setzen
$source = "textdatei.txt";
$content\_all = join("", file("textdatei.txt"));


/\*Ermittle die Anzahl aller Zeichen in der Datei!\*/
$text = file\_get\_contents($source);
$numChar = strlen($text);
$anzahl\_zeichen = $numChar;

&nbsp;
$s=1;
$e=1;
$r=0;
$strg\_n = "BLATT ";


$begin=0;

for ($i=0; $i\<20; $i++) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;$r = $i+1;
//echo "

**Datei: ". $r ."**

";

&nbsp;&nbsp;&nbsp; &nbsp; $filebegin =&nbsp; strpos($content\_all, $strg\_n.$s)+45;


&nbsp; if ($i==0) {
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//echo "WERT 's': ".$s."


";
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;$end = $filebegin;
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;$start=0;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//echo "WERT 'e': ".$e."


";
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$s=0;
&nbsp;} else {

//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo "WERT 's': ".$s."


";
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;$start =&nbsp; strpos($content\_all, $strg\_n.$s)+45;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$e = $e+1;
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$end&nbsp;&nbsp; = strrpos($content\_all, $strg\_n.$e)+45;
//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo "WERT 'e': ".$e."


"; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;}
&nbsp;
&nbsp;$textausschnitt=substr($content\_all, $start, $end-$start); 


&nbsp;&nbsp; &nbsp;$output = array($textausschnitt);
&nbsp;&nbsp; &nbsp;$output = join('', $output);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;if ($textausschnitt==NULL) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;exit;
&nbsp;&nbsp; &nbsp;} else {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file\_put\_contents("textdatei\_".$s.".html", $output) or die("Die neue HTML-Datei (textdatei\_neu 1-n) konnte nicht geschrieben werden. Bitte informieren Sie Ihren Anwendungsadministrator!");
/\*&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo " **Start: ".$start."**
";
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo " **Ende: ".$end."**


";
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo $output;\*/
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$s = $s+1;
&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;
}
?\>

Weiss jemand wie ich diesen Code so umschreiben kann, so dass die Formatierung der originalen Textdatei erhalten bleibt?

Würde mich sehr freuen, wenn Ihr mir Tips dazu geben könnt oder den Code so umschreiben könntet, so dass die Textformatierung erhalten bleibt.

Vielen Dank für Eure Mithilfe und Eure Tips.

Hat sich erledigt!!!

Ersetzt einfach in der folgenden Zeile das Suffix „.html“ durch „.txt“. :smile:

file_put_contents(„textdatei_“.$s.".html", $output) or die(„Die neue HTML-Datei (textdatei_neu 1-n) konnte nicht geschrieben werden. Bitte informieren Sie Ihren Anwendungsadministrator!“);

Das Script ist gut handlebar. Man kann daraus auch super mit fpdf gut leserliche PDF-Dateien erzeugen.

Vielen Dank und viel Spaß mit dem Script!

Viele Grüße und gute Nacht!
Mo

@Admin:
Bitte auf gelöst setzen!
Danke!