Zeilenende richtig erkennen (CRLF, LF, CR)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5235
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von af0815 »

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 ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 9265
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von theo »

Von welchem Szenario sprichst du?
Einer TStringList ist das herzlich egal, was da kommt.

sstvmaster
Beiträge: 525
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.2
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von sstvmaster »

LG Maik

Windows 10,
- Lazarus 2.2.2 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.3 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
Winni
Beiträge: 1330
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)

Beitrag von Winni »

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

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5235
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von af0815 »

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).

Benutzeravatar
Winni
Beiträge: 1330
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)

Beitrag von Winni »

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

Benutzeravatar
theo
Beiträge: 9265
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von theo »

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 ?
Deshalb habe ich nach dem Szenario gefragt.
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. :wink:
Ich glaube, das musst du wohl "von Hand" (aka zu Fuss) lösen, wenn du es so machen willst.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5235
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Zeilenende richtig erkennen (CRLF, LF, CR)

Beitrag von af0815 »

Auf die utextfilestream habe ich nicht gedacht, manche Sachen verwendet man so oft, das man sie vergisst, das die nicht aus Lazarus sind.
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.
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten