Hallo Himitsu!
Ich habe mal folgendes probiert:
Delphi-Quellcode:
aFile := 'C:\Users\D. Jan Schulz\Desktop\Iris-Tab - Kopie UTF8.txt';
F := TTextStreamEx.Create(aFile, saRead);
Try
Memo1.Clear;
While not f.EoF do Begin
aString := f.ReadLine;
Memo1.Lines.Add(aString);
end;
Finally
F.Free;
end;
Dabei ist mir aufgefallen, daß die zweite Zeile einer Datei nicht ausgelesen wird. Meiner Meinung nach liegt dies wohl an der Art, wie die Funktion TTextStreamEx.ReadLine aufgerufen wird. Hier wird beim ersten Aufruf durch den EoLn Vergleich zwei mal das ReadLine aufgerufen. Wenn man es wie nachfolgend macht klappt es:
Delphi-Quellcode:
Function TTextStreamEx.ReadLine: SString;
Begin
If EoLn Then Begin
Result := inherited ReadLine;
// FLine := inherited ReadLine; //Zeile 1429
FLine := Result;
End Else Begin
Result := FLine;
FLine := inherited ReadLine;
End;
End;
Ich bin mir jetzt aber nicht sicher, wie dieser Eingriff sich mit anderen Funktionen verhält. Ich fange gerade erst an mich mit der
Unit zu beschäftigen. Vielleicht kannst du mit etwas mehr Hintergrundwissen da etwas zu sagen. Das Gleiche scheint auch zu gelten für TTextStreamEx.ReadLn.
Vielleicht wäre es auch gut die einzelnen FFormat Einstellungen als Property nach außen zu veröffentlichen, da man oftmals Dateien mit unterschiedlichen Ländereinstellungen vorfindet.
FIndex könnte man auch nach außen legen, um gezielt einzelne Zeilen anzuspringen. Wenn ich das bislang richtig sehe, dann hast du dies ja sehr gut beim Create in der FLines Struktur abgelegt. Es müsste natürlich dann eine Kontrolle stattfinden, ob der gewählte Wert innerhalb der Ranges von FLines liegt. Aber damit könnte man dann auch 're-parsing' machen wenn man die FFormats geändert hat...
Aber wie gesagt, ich fang da gerade erst mit an und hab sicherlich noch nicht alles in deiner
Unit verstanden...
Jan