Guten Morgen,
Ich speichere meine Gästebuch-Einträge in einer Textdatei ab.
Nun ergibt sich die unangenehme Nebenerscheinung, aus welchen Gründen auch immer, dass immer wieder Leerzeilen zwischen den Einträgen gespeichert werden.
Ausgangspunkt war folgender Code:
$Neuer_Eintrag = "$Name|$Kommentar|$Erstellt_am|$Erstellt_um\n";
$Zeilen_in_Datei = file ($Gaestebuch_Eintraege);
$Anzahl_Eintraege = count ($Zeilen_in_Datei);
$Datei_Zeiger = fopen ($Gaestebuch_Eintraege, 'w+');
flock ($Datei_Zeiger, 2);
fwrite ($Datei_Zeiger, $Neuer_Eintrag);
for ($i = 0; $i < $Anzahl_Eintraege; $i++)
fwrite ($Datei_Zeiger, $Zeilen_in_Datei [$i]);
flock ($Datei_Zeiger, 3);
fclose ($Datei_Zeiger);
Bei 2 Einträgen sieht die Datei nun so aus:
b|b|30.10.2004|06:15.51|b|b|xxx|xxx|xxx
a|a|30.10.2004|06:15.43|a|a|xxx|xxx|xxx
Leerzeile
Leerzeile
Leerzeile
Ich habe die Datei nun in einem Texteditor komplett gelerrt und die for-Schleife um folgende Anweisung ergänzt:
if (! preg_match ("/^([:space:]*)\n$/", $Zeilen_in_Datei [$i]))
Damit sieht der neue for-Block so aus:
for ($i = 0; $i < $Anzahl_Eintraege; $i++)
{
if (! preg_match ("/^([:space:]*)\n$/", $Zeilen_in_Datei [$i]))
fwrite ($Datei_Zeiger, $Zeilen_in_Datei [$i]);
}
Bei Erstellung des 1. Eintrages wird auch nur der eine Eintrag ohne Leerzeile geschrieben.
Bei Erstellung des 2. Eintrages habe ich nach den Einträgen aber wieder eine Leerzeile:
b|b|30.10.2004|06:28.15|b|b|xxx|xxx|xxx
a|a|30.10.2004|06:27.28|a|a|xxx|xxx|xxx
Leerzeile
Bei Erstellung des 3. Eintrages sieht die Datei aber wieder so aus:
c|c|30.10.2004|06:29.41|c|c|xxx|xxx|xxx
b|b|30.10.2004|06:28.15|b|b|xxx|xxx|xxx
Leerzeile
a|a|30.10.2004|06:27.28|a|a|xxx|xxx|xxx
Leerzeile
Leerzeile
Wie kann ich verhindern, dass diese unnötigen Leerzeilen nicht in die Textdatei geschrieben bzw. gelöscht werden ?
Vielen Dank.
Gruss, Michael