Textdatei auslesen und formatiert anzeigen

Wenn die Datei weiter so unformatiert ist gibt es nur 2 Regeln:

  • 1. Zeile ist immer eine Überschrift
  • Nach jeder Freizeile Kommt eine Überschrift

Dann könnte man es auch so lösen:

PHP:
$head = false;
$bold = true;
$file = explode("\n", file_get_contents('datei.bla'));
foreach ($file as $row){
    if($row == "") $head = true;
    echo ($bold?'<b>':'').$row.($bold?'</b>':'').'<br>';
    if($head) {
        $bold = true;
        $head = false;
    } else {
        $bold = false;
    }
}

Danke für diese Lösungsvariante! :)

Folgende Sache ist dabei aufgetreten: Die erste Überschrift wurde korrekt (Fett) ausgegeben; alle anderen dann nicht mehr! :confused:
 
Er erkennt leere Zeilen. Falls auch Leerzeichen oder so darin vorkommen können mach noch ein trim() beim vergleich:

PHP:
    if(trim($row) == "") $head = true;
 
Hallo Engelb,

danke für Deine Hilfe :) Mit "trim" funktioniert es supi!

Nun habe ich noch folgende Sachen:

1.) Der ausgegebene Text soll noch mit htmlentities "formatiert"
werden. Leider weiß ich nicht, wie bzw. wo ich das einfügen soll?

2.) Die Überschriften werden korrekt "Fett" ausgegeben; jedoch möchte
ich die Textteile unter jeder Überschrift "Kursiv" formatieren. Ist
das so korrekt, wie ich das umgesetzt habe?

3.) Am Ende der gesamten Ausgabe soll dann ("Unterschrichen"):
"Verfaßt am:..." stehen. Ist das so korrekt, wie ich das umgesetzt habe?

Für Deine Hilfe wäre ich sehr dankbar.

PHP:
$head = false;
$bold = true;
$file = explode("\n", file_get_contents('bla.txt'));
foreach ($file as $row)
{
if(trim($row) == "") $head = true;
echo ($bold?'<b>':'').$row.($bold?'</b><br><i>':'').'';
if($head)
{
echo '</i>';
$bold = true;
$head = false;
}
else
{
$bold = false;
}
}
echo '</i><u>Verfaßt am: ...</u>';
 
Ansonsten wenn es so aussieht wie du wolltest sieht du ja schnell ob es so richtig ist ,)

PHP:
echo ($bold?'<b>':'').htmlentities($row).($bold?'</b><br><i>':'').'';
 
Hi@all
ich weiß, das hier ist schon etwas älter, aber es hat mir sehr geholfen auch min Vorhaben entsprechend umzusetzen - danke dafür.
Ich hoffe trotzdem, das dieser Thread nochmal aufgenommen wird, denn ich habe noch eine Frage zum Script.

Wie bekomme ich es hin das er eine Überschrift erst als Überschrift erkennt wenn ZWEI Leerzeilen vor einer Überschrift sind ???
Code:
Das ist die erste Überschrift
Leerzeile
Das ist normaler Text
Das ist normaler Text
Das ist normaler Text
Leerzeile
Das ist normaler Text
Das ist normaler Text
Das ist normaler Text
Leerzeile
Leerzeile
Das ist eine weitere Überschrift
Leerzeile
Das ist normaler Text
Das ist normaler Text
Das ist normaler Text
Leerzeile
Das ist normaler Text
Das ist normaler Text
Das ist normaler Text
usw.

PHP:
...
$leerzeile = 0;
...
foreach
...
if(trim($row) == "") $leerzeile++;
if($leerzeile == 2) { $head = true; $leerzeile=0;}
...

… aber irgendwie komme ich damit nicht zum gewünschten Ergebnis.
Wäre echt nett von Euch, wenn da mal jemand drüber schauen könnte und mir einen entsprechenden Tipp geben kann.

Ich hoffe , ich habe mich verständlich ausgedrückt
Thx@all
 
Dies sollte tun, was Du brauchst:
Code:
function getHeader($row)
{
    return ('<h1>' . $row . '</h1>');
}
$text = file('thread344-format-text.txt', FILE_IGNORE_NEW_LINES);
echo getHeader($text[0]);
$empty = 0;
for ($i = 1; $i < count($text); $i++) {
    $row = $text[$i];
    if (trim($row) == '') {
        $empty++;
    } else {
        if ($empty >= 2) {
            echo getHeader($row);
        } else {
            echo ('<p>' . $row . '</p>');
        }
        $empty = 0;
    }
}
Je nach Semantik kannst Du natürlich auch etwas anderes als ein <p> nehmen, eine Klasse hinzu fügen etc.
 
Zuletzt bearbeitet:
Hi@all

na das ging ja fix - suuuper, vielen herzlichen Dank.
Allerdings habe ich nun das Problem, dass mir keine Zeilenumbrüche und keine Leerzeilen mit angezeigt werden, der gesamte Text wird als Block ausgegeben.

Die Leerzeilen soll er natürlich auch ausgeben, damit man die Textabsätze erkennt.

Und was bewirkt : FILE_IGNORE_NEW_LINES

Thx@all
 
Zuletzt bearbeitet:
Die Leerzeilen kannst Du beibehalten, indem Du z. B. ein <br> einfügst, so:
PHP:
function getHeader($row)
{
    return ('<h1>' . $row . '</h1>');
}
$text = file('thread344-format-text.txt', FILE_IGNORE_NEW_LINES);
echo getHeader($text[0]);
$empty = 0;
for ($i = 1; $i < count($text); $i++) {
    $row = $text[$i];
    if (trim($row) == '') {
        echo '<br>';
        $empty++;
    } else {
        if ($empty >= 2) {
            echo getHeader($row);
        } else {
            echo ('<p>' . $row . '</p>');
        }
        $empty = 0;
    }
}
Zeilenumbrüche sollten eigentlich erhalten bleiben, da ich pro Zeile ein Absatzelement verwendet habe (<p>). Falls Du etwas anderes meinst, beschreibe es genauer und poste vielleicht etwas originalen Test (wenn er nicht vertraulich ist).

Und was bewirkt : FILE_IGNORE_NEW_LINES
Das kannst Du hier nachlesen:
https://www.php.net/manual/de/function.file.php
 
Zurück