Einträge aus einzulesender Textdatei werden nicht angezeigt
Enrico
- php
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
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
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
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
HAllo Tom,
perfekt, perfekt, perfekt :-)
1.000 Dank, jetzt klappt's haargenau so, wie ich es mir vorgestellt habe :-)
Gruß,
Enrico
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
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