Zeilenenden Readln, Writeln Unix Windows

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Zeilenenden Readln, Writeln Unix Windows

Beitragvon alfware17 » 3. Sep 2019, 13:32 Zeilenenden Readln, Writeln Unix Windows

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
alfware17
 
Beiträge: 25
Registriert: 15. Dez 2010, 00:27

Beitragvon Warf » 3. Sep 2019, 16:39 Re: Zeilenenden Readln, Writeln Unix Windows

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.
Warf
 
Beiträge: 1213
Registriert: 23. Sep 2014, 17:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried