Tom: Zeilenumbruch in txt-Datei 1 oder 2 Byte lang?

Beitrag lesen

Hello Olli,

Wie man dem Titel schon entnehmen kann, wüsste ich gerne wie lang ein Zeilenumbruch in einer Textdatei ist.

Das hängt davon ab, wie Du ihn selber fetlegst.
Der Begriff "Textdatei" ist dabei allerdings in gewisser Weise gewachsen und "geschützt". Er klassifiziert in den unterschiedlichen Betriebssystem- und Filesystemwelten Dateien, die nur vorwärts lesbar sind und bei denen man nur jeweils am Ende etwas anfügen kann. Das stammt immer noch aus der Welt der Bandanlagen.

Beim Übergang zu den DO-Systemen (Festplattenorientierte Systeme)

  • hat die Microsoftwelt sich dann für ein 0x0D 0x0A entschieden,
      also die Codes #13 und #10, entsprechend ihrer Bedeutung Carriage Return (CR),
      Linefeed (LF)
  • hat die Unixwelt sich für ein einzelnes 0x0A, also den Bytecode #10 mit der
      Bedeutung Linefeed (LF) entschieden
  • Die Mac-Welt bis zur Umstellung auf BDS-Linux im Background hat nur das 0x0D, also #13 benutzt.

PHP kennt allerdings gar keine reinen Textdateien mehr, sondern nur noch Dateien mit wahlfreiem Zugriff. Man kann zwar auch hier noch Dateien mit dem Öffnungsmodus 'a' (Append) öffnen, was einen dann daran hindert, mitten in die Datei hineinzuschreiben, aber zum Lesen kannst Du darin navigieren.

Dein Problem scheint aber vermutlich durch die Übertragung der Datei von einem System zum anderen per FTP zu stammen. Du hast vermutlich nicht den Binärmodus, sondern den sogenannten "ASCII-Modus" benutzt. Hier werden die Dateien dann beim Hochladen verändert. Z.B. werden bei der Übertragung von MS zu Linux die aus zwei Codes bestehenden Zeilenumbrüche gegen den aus einem Code ersetzt.

Ich würde an Deiner Stelle die Datei komplett einlesen in eine Bytefolge, also in einen "PHP-String", der aus Bytes besteht. Dann kannst Du auf jedes Element der Bytefolge (früher "String") direkt zugreifen.

$buffer = file_get_contents($dateiname);
   echo $buffer[26];

Oder du baust die Organisation gelich in einem PHP-Array auf. Zum Speichern kannst Du dieses Array dann serialisieren http://de2.php.net/manual/en/function.serialize.php und nach dem Wiederholen aus der Datei wieder in ein Array zurückverwandeln http://de2.php.net/manual/en/function.unserialize.php.

Das funktioniert mit Dateien bis ca. 500kBytes in allen mir bisher bekannten Fällen sehr flott. Bei ca. 1MByte Dateigröße ist dann allerdings "Schluss mit Lustig" :-)

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de