Zeilenende richtig erkennen (CRLF, LF, CR)
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Zeilenende richtig erkennen (CRLF, LF, CR)
Hallo,
ich habe hier Textdateien (CSV ähnlich), die immer wieder anderes Zeilenende haben. Einmal ist es Windows(CRLF) dann wieder Linux(LF). Gibt es in der LCL (FCL) eine Erkennung für die Zeilenenden ? Oder wie macht ihr das, wenn ihr den Text dann parsen müsst und euch auf die Zeilenenden einstellen müsst ?
ich habe hier Textdateien (CSV ähnlich), die immer wieder anderes Zeilenende haben. Einmal ist es Windows(CRLF) dann wieder Linux(LF). Gibt es in der LCL (FCL) eine Erkennung für die Zeilenenden ? Oder wie macht ihr das, wenn ihr den Text dann parsen müsst und euch auf die Zeilenenden einstellen müsst ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Von welchem Szenario sprichst du?
Einer TStringList ist das herzlich egal, was da kommt.
Einer TStringList ist das herzlich egal, was da kommt.
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Vielleicht kann EOLn da helfen?
- https://www.freepascal.org/docs-html/rt ... /eoln.html
Nachtrag, SeekEOLn:
-https://lazarus-ccr.sourceforge.io/docs ... keoln.html
- https://www.freepascal.org/docs-html/rt ... /eoln.html
Nachtrag, SeekEOLn:
-https://lazarus-ccr.sourceforge.io/docs ... keoln.html
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Hi!
Warum nicht auf Theo hören:
Der Stringlist ist egal, ob da CRLF, CR oder LF steht. Die ist schlau.
D.h. ich kann auch eine Datei mit LF unter Windows einlesen.
Oder eine Datei mit CRLF unter Linux.
Sehr angenehm.
Readln aus Textdatei besitzt das gleiche schlaue Verhalten.
Winni
Warum nicht auf Theo hören:
Der Stringlist ist egal, ob da CRLF, CR oder LF steht. Die ist schlau.
D.h. ich kann auch eine Datei mit LF unter Windows einlesen.
Oder eine Datei mit CRLF unter Linux.
Sehr angenehm.
Readln aus Textdatei besitzt das gleiche schlaue Verhalten.
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Winni hat geschrieben: Do 11. Aug 2022, 15:01 Warum nicht auf Theo hören:
Der Stringlist ist egal, ob da CRLF, CR oder LF steht. Die ist schlau.
Was machst du, wenn du keine Stringlist verwendest, sondern Zeile für Zeile liest. So und wie komme ich jetzt von Zeile zu Zeile ?
Der Klassiker ist, nach CR und LF zu suchen. Finde ich einen der beiden, muss ich mir das letzte und das nächste Zeichen ansehen. Damit kann ich dann ganz klassisch mir erarbeiten ob eine CRLF, LF oder CR vorhanden ist (oder ein krankes LFCR, wie ich es selbst mal produziert habe

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Hi af0815!
Hatte ich doch geschrieben:
readln (aTextFile, aString);
ist genauso schlau.
Liest alle Zeichen bis irgendein geartetes Zeilenende kommt.
Egal ob Dos, Linux oder Mac.
Verschluckt das Zeilenende und der File-Pointer steht auf dem ersten Zeichen der nächsten Zeile.
Die Gedanken hab ich mir bei meinen ersten Schritten mit fpc auch gemacht - damals noch im Dual-Boot mit Win und Lin. Und ich war angenehm überrascht.
Winni
Hatte ich doch geschrieben:
readln (aTextFile, aString);
ist genauso schlau.
Liest alle Zeichen bis irgendein geartetes Zeilenende kommt.
Egal ob Dos, Linux oder Mac.
Verschluckt das Zeilenende und der File-Pointer steht auf dem ersten Zeichen der nächsten Zeile.
Die Gedanken hab ich mir bei meinen ersten Schritten mit fpc auch gemacht - damals noch im Dual-Boot mit Win und Lin. Und ich war angenehm überrascht.
Winni
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Deshalb habe ich nach dem Szenario gefragt.af0815 hat geschrieben: Do 11. Aug 2022, 16:18 Was machst du, wenn du keine Stringlist verwendest, sondern Zeile für Zeile liest. So und wie komme ich jetzt von Zeile zu Zeile ?
Mit TStringList und offenbar mit ReadLn ist es nämlich kein Problem.
Ich nehme jetzt an, du beziehst dich auf deine "utextfilestream.pas" viewtopic.php?p=129335#p129335
Sag das doch einfach, dann braucht man nicht rumeiern.

Ich glaube, das musst du wohl "von Hand" (aka zu Fuss) lösen, wenn du es so machen willst.
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Zeilenende richtig erkennen (CRLF, LF, CR)
Auf die utextfilestream habe ich nicht gedacht, manche Sachen verwendet man so oft, das man sie vergisst, das die nicht aus Lazarus sind.
Wird auch in der Class Function TStrings.GetNextLine so 'zu Fuß' gelöst, also in der Elternklasse von der TStringList, werde mal die Komponente utextfilestream bearbeiten dürfen.theo hat geschrieben: Do 11. Aug 2022, 17:07 Ich glaube, das musst du wohl "von Hand" (aka zu Fuss) lösen, wenn du es so machen willst.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).