[edit] Sekunde, bin och blöd ... werd's gleich nochmal probieren, mit der richtigen Klasse
und mich dann wieder melden.
[add] Die Funktion ReadLine sollte aber korrekt sein und ich vermute mal einen Fehler im .Create, denn sonst würde nicht nur die 2. Zeile fehlen, sondern womöglich
jede Zweite.
[add2] Also, ein
Inherited ReadLine
im .Create könnte nicht schaden und das Problem mit der fehlenden Zeile ... es liegt daran, daß es ein "kleines" Problemchen mit "leeren" Zeilen gibt.
Da hatte ich damals in meiner Testdatei wol keine drin.
Muß mir dafür nur noch was überlegen, denn ich hatte den LeerString quasi als "Markierung" für das Zeilenende genutzt, so daß er nun Leerzeilen überspringt, aber ich hab schon eine Idee (muß nur noch ausprobieren ob's geht).
Hmmm, ich hab mir nochmal schnell ein kleines Testprogramm erstellt und da scheint es diesbezüglich keine Probleme zu geben.
Delphi-Quellcode:
Program Project1;
{$APPTYPE CONSOLE}
Uses SysUtils, TextStream;
Var S: TTextStream;
i: Integer;
Begin
Try
S := TTextStream.Create('
TextStream.pas', saRead);
i := 0;
While not S.EoF
and (i < 15)
do Begin
WriteLn(Copy(S.Line, 1, 79));
Inc(i);
End;
S.Free;
ReadLn;
Except
On E:
Exception do Begin
WriteLn(E.ClassName, '
: ', E.
Message);
ReadLn;
End;
End;
End.
(das Copy, falls die Zeile länger ist, als die Konsole breit)
Aber vielleicht liegt es ja an einer, wie die Juristen gern sagen, Verkettung unglücklicher Umstände?
Kannst du mir mal dein (Test)Projekt und die zu lesende Datei zukommen lassen?
OK, das mit dem FFormat war garnicht geplant es nach außen weiterzugeben, da ich intern so sicherstellen wollte, daß hiermit "gespeicherte" Daten überall korrekt gelesen werden können, egal welche Ländereinstellung im System vorliegen.
Auf die Idee daß man auch andersweitige Dateien damit leden können wöllte, bin ich garnicht gekommen.
Läßt sich aber leicht nachrüsten
Delphi-Quellcode:
Constructor Append (Filename: SString; Encoding: TEncoding = nil; OwnsEncoding: Boolean = False);
Destructor Close;
Property NumberFormat: TFormatSettings Read FFormat;
Procedure SetNumberFormat(Const Format: TFormatSettings);
Procedure Read (Var Value: SString); Overload;
und dann unten noch das rein
Delphi-Quellcode:
Procedure TTextStreamEx.SetNumberFormat(Const Format: TFormatSettings);
Begin
FFormat := Format;
End;