file() gibt einen zu kurzen Array aus (weil letzte Zeile leer)
cKonzi
- php
Der Titel lässt hoffen! Hier die ganze Wahrheit:
Ich lese meine Daten aus Textdateien mittels $FILE = file(). Diese sind stets 14 Zeilen lang.
Jetzt habe ich eine Störung aufgedeckt, da ich dem Array nach dem Funktionsaufruf von file() mittels array_combine() neue Schlüssel verpasse. Das Problem: mein Rückgabe-Array aus file() ist nur 13 Felder groß. In diesem Fall ist aber nicht _nur_ Zeile 14 leer, sondern alle ab 10.
Warum ist count($FILE] nicht = 10? Und vor allem nicht 14? :)
Wie kann ich das Problem elegant beheben?
Ist mir ehrlich so noch nicht aufgefallen, das file() die letzte Leerzeile ignoriert. Oder sehe ich hier etwas falsch?
PS: In Dateien, wo Zeile 14 besetzt ist, ist count($FILE) nat. auch 14.
PPS: Codierung ISO 8859-2, falls das von Interesse ist:)
Hello,
file() zerteilt den Input-Stream an den Zeilenendezeichen in einzelne Elemente und fügt diese ins Ergebnisarray ein.
Wenn die Zeilenendezeichen nicht sauber durchgehalten werden, könnten dadurch Fehler auftreten. Ausprobiert habe ich das jetzt nicht, aber denkbar wärs.
"Autodetect Line Endings" wäre dazu ein Stichwort.
http://de2.php.net/manual/de/function.file.php
http://de2.php.net/manual/de/filesystem.configuration.php#ini.auto-detect-line-endings
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Warum ist count($FILE] nicht = 10? Und vor allem nicht 14? :)
Ist mir ehrlich so noch nicht aufgefallen, das file() die letzte Leerzeile ignoriert.
Nebst der Antwort von Tom: eine Leerzeile ist etwas anderes wie[sic! :p] ein neu angenfangene Zeile - dadurch kommt ggf. auch ein von deiner Erwartungshaltung abweichendes Ergebnis raus - vier Zeilen erklärt das freilich nicht.
"foo
"
"foo
"