Zeilenenden Readln, Writeln Unix Windows

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Zeilenenden Readln, Writeln Unix Windows

Beitrag von alfware17 »

Hallo, eine vermutlich totale Anfängerfrage - aber irgendwie stehe ich grade bisschen auf dem Schlauch.

Ich habe ein Programm portiert von Windows (Freepascal) nach Linux Mint.
Es liest (vereinfacht) Zeilen aus Dateien mit Readln ein, macht was damit und schreibt sie dann zurück mit Writeln.
Datei kann im Spezialfall auch die Konsole sein (Aufruf dann mit < und >), also eine Art Filterprogramm.
Jetzt habe ich (mit dem gleichen Quelltext) 3 Probleme festgestellt
1. die Kommentarausgaben (Umlaute/UTF8) - ok kann ich lösen
2. möglicherweise Umlaute/UTF8 in den Dateien selber (muß ich aber erst untersuchen, wenn ich 3.geklärt habe)
3. die unterschiedlichen Zeilenumbrüche Linux (0Ah) und Windows (0Dh 0Ah).
Das Problem tritt auf, wenn die Eingabe-Datei ihren Ursprung im Windows hat und ich sie im Linux Mint verarbeite
(mein erster Test, ob es das Programm tut).
Das Writeln schreibt mir dann nur Linux-Zeilen-Umbruch (0Ah), was ich natürlich an der Byteanzahl und der MD5-Summe
hinterher merke, der Rest scheint ok, sagt jedenfalls Totalcommander binär verglichen.
Das ist wahrscheinlich alles legal und würde umgekehrt auch so auftreten (Linux Eingabe-Datei im Windows).

Jetzt meine Frage, wahrscheinlich ist es ein längst gelöstes Problem, Linux selbst erkennt es ja.
Aber kann mein Readln beim Lesen auch schon erkennen, ob 0Ah oder 0Dh 0Ah an der Zeile hängt?
Ich kriege doch netto den Inhalt ohne Zeilenende, oder ? (so genau habe ich noch nicht debuggt, kann ich aber machen)
Ich dachte mir, ich könnte ein Bit setzen und dann bei der Ausgabe explitit das mit berücksichtigen (nur noch Writes benutzen,
wird unkomfortabel aber naja).

Hat da jemand Erfahrungen, das schon mal gemacht? Wäre für jeden Tip dankbar.

Wenn die Frage zu "Einsteiger" gehört, sorry - aber ich dachte hier bei Freepascal nutzt man noch am ehesten die
Writeln und Readln.

Bernd

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Zeilenenden Readln, Writeln Unix Windows

Beitrag von Warf »

WriteLN und ReadLn wie der name schon sagt kümmern sich selbst um das Handlen von NewLines. Wenn du das selbst machen willst benutz Write und Read, oder besser, benutz einen TFileStream.

Antworten