Enrico: Einträge aus einzulesender Textdatei werden nicht angezeigt

Hallo,

ich möchte über nachfolgenden Code eine Textdatei einlesen und alle
darin enthaltenen Einträge geordnet anzeigen lassen:

FUNCTION DATENBANK_EINLESEN()
   {
     $DATEIZEIGER=FOPEN("..\DATENBANK\DATENBANK.txt","r");
     $INHALT_DATENBANK=FREAD($DATEIZEIGER,FILESIZE("..\DATENBANK\DATENBANK.txt")+1);
     FCLOSE($DATEIZEIGER);
     $INHALT_DATENBANK=PREG_REPLACE("/\r\n|\r|\n/","#",$INHALT_DATENBANK);
     $EINTRAG=EXPLODE("#",$INHALT_DATENBANK);
     $ANZAHL_EINTRAEGE=COUNT($EINTRAG);
     FOREACH(RANGE(0,$ANZAHL_EINTRAEGE) as $ZAEHLER)
     {
       $SPALTE=EXPLODE("|",$EINTRAG[ZAEHLER]);
       echo $SPALTE[0]." - ".$SPALTE[1]." - ".$SPALTE[2]." - ".$SPALTE[3]."<br><br>";
     }
   }

Bis zur FOREACH-Schleife funktioniert alles einwandfrei, aber danach wird mir nichts angezeigt.

Könnt ich mir weiterhelfen und mir sagen, wo der Fehler liegt ?

Vielen Dank für Eure Unterstützung.

Gruß,
Enrico

  1. Hallo Enrico,

    so schnell trifft man sich wieder. ;-)

    ich möchte über nachfolgenden Code eine Textdatei einlesen und alle darin enthaltenen Einträge geordnet anzeigen lassen:

    Das erste, was mir bei deinem Code auffällt, ist die penetrante Großschreibung. Das macht den Text unheimlich schwer lesbar und ist höchst ungewöhnlich (findet man sonst nur in amerikanischen Disclaimern).
    In den meisten Programmiersprachen werden die Keywords klein geschrieben, und bei den Bezeichnern wird Groß- und Kleinschreibung unterschieden. PHP ist da etwas großzügiger - aber es ist trotzdem empfehlenswert, auch hier die übliche Kleinschreibung zu verwenden.

    FUNCTION DATENBANK_EINLESEN()
       {
         $DATEIZEIGER=FOPEN("..\DATENBANK\DATENBANK.txt","r");
         $INHALT_DATENBANK=FREAD($DATEIZEIGER,FILESIZE("..\DATENBANK\DATENBANK.txt")+1);

    Was meinst du, was \D für ein Sonderzeichen ist? Ich mutmaße, dass deine Datei so niemals gefunden wird und fopen() demzufolge kein gültiges Ressourcen-Handle zurückgibt. Hast du das mal überprüft? Der Aufruf von fread() müsste daher schon fehlschlagen.

    Abgesehen davon, dass man den Backslash in "interpretierten" (also mit doppelten Anführungszeichen geschriebenen) Strings verdoppeln muss, wenn er nicht als Escape-Sequenz gemeint ist, gilt allgemein der normale Schrägstrich "/" als Verzeichnistrennzeichen. Ja, auch Windows versteht das.

    Bis zur FOREACH-Schleife funktioniert alles einwandfrei, aber danach wird mir nichts angezeigt.

    Nicht einmal bis dorthin.

    So long,
     Martin

    --
    Zum Glück ist alles nur halb so doppelt.
    1. Hello,

      Was meinst du, was \D für ein Sonderzeichen ist?

      Ach gücke da. Ich war so irritiert von der Großschreibung, dass ir DAS gar nicht aufgefallen ist ;-)

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Hello,

    Hallo,

    $DATEIZEIGER=FOPEN("..\DATENBANK\DATENBANK.txt","r");
         $INHALT_DATENBANK=FREAD($DATEIZEIGER,FILESIZE("..\DATENBANK\DATENBANK.txt")+1);
         FCLOSE($DATEIZEIGER);

    $INHALT_DATENBANK=PREG_REPLACE("/\r\n|\r|\n/","#",$INHALT_DATENBANK);
         $EINTRAG=EXPLODE("#",$INHALT_DATENBANK);

    stattdessen besser

    $INHALT_DATENBANK = PREG_split("/\r\n|\r|\n/",$INHALT_DATENBANK);

    Wenn Du das nicht absichtlich haben willst, dass auch bei eventuell im Text enthaltenen '#' eine Zeile entstehen soll, also z. B. bei "...dann nehmen wir Nummer #13 und teilen dort auch..."

    $ANZAHL_EINTRAEGE=COUNT($EINTRAG);
         FOREACH($INHALT_DATENBANK as $key = >$val)
         {
           $SPALTE = EXPLODE("|",$val);

    if isset($SPALTE[0])) echo $SPALTE[0];
             if isset($SPALTE[1])) echo " - " . $SPALTE[1];
             if isset($SPALTE[2])) echo " - " . $SPALTE[2];
             if isset($SPALTE[3])) echo " - " . $SPALTE[3];

    }

    Da ich aus der Zeile

    $INHALT_DATENBANK=FREAD($DATEIZEIGER,FILESIZE("..\DATENBANK\DATENBANK.txt")+1);

    erlese, dass Du einen Fehlermeldungsfreien Verlauf wünschst, müsste das so Deinen Wünschen entsprech en. Eine Funktion ist es aber nicht, denn Funktionen haben Rückgabewerte und verurschachen keine eigenen Ausgaben.

    Sortiert wird hier auch noch nichts.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. HAllo Tom,

      perfekt, perfekt, perfekt :-)

      1.000 Dank, jetzt klappt's haargenau so, wie ich es mir vorgestellt habe :-)

      Gruß,
      Enrico

      1. Hello,

        1.000 Dank, jetzt klappt's haargenau so, wie ich es mir vorgestellt habe :-)

        Denk  aber auch an das, was Martin Dir geschrieben hat.

        $fh = fopen('../DATENBANK/DATENBANK.txt','r');

        würde also reichen und ist leichter lesbar.

        Und dann noch ein Tipp: Das Pipe-Symbol (|) ist ein darstellbares Zeichen und deshalb viel zu schade, um als Trenner zwischen den Feldern genutzt zu werden. Wenn Du as noch ändern kannst, dann benutze doch das Zeichen chr(31) = Unit Seperator. Das ist eigentlich dafür gedacht, Datenfelder voneinander zu trennen. http://de.wikipedia.org/wiki/Steuerzeichen

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Hallo Tom,

          habe den Tip mit der Kleinschreibung beherzigt.

          Da die Dateien nur lokal zuhause lagern, kann ich alles ändern.

          Ich will "nur" ein vernünftiges Programm für mich zuhause erstellen.

          Gruß,
          Enrico