Michael Clos: Unnötige Leerzeilen in dat-datei entfernen

Hallo,

ich habe Probleme mit der Speicherung neuer Gästebuch-Einträge in einer dat-Datei, da immer wieder Leerzeilen eingefügt werden, was nicht sein soll.

Hier der relevante Code zur Speicherung eines neuen Eintrages:

$Eintraege_in_Datei = file ($Datei_Name);
$Anzahl_Eintraege = count ($Eintraege_in_Datei);

$Datei_Zeiger = fopen ($Datei_Name, "w");

if (strtoupper ($Betriebssystem) == "UNIX")
{
  if (flock ($Datei_Zeiger, LOCK_EX))
  {
    fwrite ($Datei_Zeiger, $Neuer_Eintrag);

if ($Anzahl_Eintraege > 0)
    {
      fwrite ($Datei_Zeiger, "\n");

for ($i = 0; $i < $Anzahl_Eintraege; $i++)
      {
        if (empty ($Eintraege_in_Datei [$i]))
          continue;
        else
          fwrite ($Datei_Zeiger, $Eintraege_in_Datei [$i] . "\n");
      }
    }

flock ($Datei_Zeiger, LOCK_UN);
  }
}
else
{
  fwrite ($Datei_Zeiger, $Neuer_Eintrag);

if ($Anzahl_Eintraege > 0)
  {
    fwrite ($Datei_Zeiger, "\n");

for ($i = 0; $i < $Anzahl_Eintraege; $i++)
    {
      if (empty ($Eintraege_in_Datei [$i]))
        continue;
      else
        fwrite ($Datei_Zeiger, $Eintraege_in_Datei [$i] . "\n");
    }
  }
}

Die dat-Datei sieht hierbei wie folgt aus:

Ein Eintrag erstellt:
[1] XXXXXXXXXX

Zwei Einträge erstellt:
[1] xxxxxxxxxx
[2] xxxxxxxxxx
[3] Leerzeile

Drei Einträge erstellt:
[1] xxxxxxxxxx
[2] xxxxxxxxxx
[3] Leerzeile
[4] Leerzeile
[5] xxxxxxxxxx
[6] Leerzeile
[7] Leerzeile

Vier Einträge erstellt:

[1] xxxxxxxxxx
[2] xxxxxxxxxx
[3] Leerzeile
[4] Leerzeile
[5] xxxxxxxxxx
[6] Leerzeile
[7] Leerzeile
[8] Leerzeile
[9] Leerzeile
[10] Leerzeile
[11] Leerzeile
[12] xxxxxxxxxx
[13] Leerzeile
[14] Leerzeile
[15] Leerzeile
[16] Leerzeile
[17] Leerzeile
[18] Leerzeile
[19] Leerzeile

Wie kann ich Leerzeilen 100% verhindern ?

Vielen Dank im voraus.

Gruss, Michael Clos

  1. Hallo,

    if (empty ($Eintraege_in_Datei [$i]))

    Probier hier mal empty(trim($Eintraege_in_Datei [$i])), trim filtert dann vorher nicht sichtbare Zeichen (Leerzeichen, Zeilenumbrüche etc.) raus.

    Schöne Grüße
    Julian

    --
    "Hex is for sissies. Real men use binary. And the most hardcore types use only z
    eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski
    1. Hallo Julian,

      Danke für Deinen Tip. Jetzt habe ich zwischendrin keine Leerzeilen mehr, aber immer noch ab dem zweiten Eintrag eine Leerzeile am Ende der Datei.

      Soll ich die Schleife dann noch einmal durchlaufen lassen, um auch diese Zeile herauszufiltern ?

      Sicherlich nicht sonderlich elegant...   :o)

      Was stimmt noch nicht ganz ?

      Gruss, Michael Close

      1. Hi Michael!

        Soll ich die Schleife dann noch einmal durchlaufen lassen, um auch diese Zeile herauszufiltern ?

        Das liegt daran, dass du bei deinem fwrite immer ein ."\n" am Ende hast. Wenn du überprüfst, ob du im letzten Durchgang der Schleife bist, und in diesem Fall KEIN "\n" mit rein schreibst, ist vermutlich auch die letzte Leerzeile weg.

        Schöne Grüße
        Julian

        --
        "Hex is for sissies. Real men use binary. And the most hardcore types use only z
        eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski
        1. Guten Morgen, Julian,

          Bingo !!! :-))

          Jetzt funktioniert's...

          Vielen Dank:-))

          Gruss, Michael