Dateiimport zeilenweise per Stream

17. März 2021 09:01

Hi ich versuche eine Datei per Stream einzulesen.
Dabei möchte ich gerne auf Zeilenumbrüche reagieren. Ich dachte, dass folgendes Konstrukt funktioniert:

Code:
CR := 10;
LF := 13;

ImportFile.OPEN('C:\TEMP\im.txt');
ImportFile.CREATEINSTREAM(IStream);
WHILE NOT IStream.EOS DO BEGIN
  IStream.READtext(Buffer);
  FOR BufferPos := 1 TO STRLEN(Buffer) DO BEGIN
    if Buffer[BufferPos] = CR then
   ...


Leider funktioniert das nicht wie gewünscht. Char 10 und 13 kommen im Stream scheinbar gar nicht an. Char 9 (Tab) hingegen hat funktiniert.

Re: Dateiimport zeilenweise per Stream

17. März 2021 10:36

Hallo,

Kann das sein, das der Text schon zeilenweise einglesen wird?

Im TextMode bzw. ReadText schmeißt er die CRLFs glaube ich schon beim lesen weg.

Gruß Fiddi

Re: Dateiimport zeilenweise per Stream

18. März 2021 15:28

Jo, sieht eigentlich so aus. Vielleicht mal noch mit dem Encoding rumspielen. Hier noch ein DotNet Pendant:

Code:
Name   DataType   Subtype   Length
ServerFileName   Text      
StreamReader   DotNet   System.IO.StreamReader.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
Encoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
FileStream   DotNet   System.IO.FileStream.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
FileMode   DotNet   System.IO.FileMode.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   


Code:
//Setze Encoding
Encoding := Encoding.UTF8;

//Lade Datei
FileStream := FileStream.FileStream(ServerFileName,FileMode.Open);
StreamReader := StreamReader.StreamReader(FileStream,Encoding,TRUE);

//Lese Zeilen
WHILE NOT StreamReader.EndOfStream DO
  ProceedFileLine(StreamReader.ReadLine);


Grüße