Hallo Sebastian,
ich habe versucht, Dein Programm für meine Zwecke zu erweitern. Das ist mir auch gelungen, aber an einer Stelle haut es ihn immer wieder raus. Er soll die Position eines String suchen und setzt gleichzeitig die Position des Readers auf diese :
Beispiel :
f := TSJMmfFileReader.Create(Dateiname);
f.Position := f.StringPos(S);
Delphi-Quellcode:
function TSJMmfFileReader.StringPos(AValue: string): Int64;
var
s: string;
begin
Result := -1;
while Position < FSize do
begin
ReadLn(s);
if s = AValue then
begin
Result := Position;
Exit;
end;
end;
end;
Das Setzen der Position geht bei mir solange gut, bis ich zu einer Position mit der Größe von 2.386.487 komme. Bei SetPosition ruft er ReInitView auf. MapViewOfFile setzt dann FPointer auf nil. In ReadLn haut es ihn dann raus.
Kannst Du mir sagen, was ich falsch mache?
Gruss Jens
Edit:
Sooo..., warum der Fehler auftritt, weiß ich immer noch nicht, aber so scheint es zu funktionieren :
Beispiel:
f := TSJMmfFileReader.Create(Dateiname);
f.GotoString(S);
Delphi-Quellcode:
function TSJMmfFileReader.GotoString(AValue: string): Boolean;
var
s: string;
begin
Result := False;
Position := 0;
while Position < FSize do
begin
ReadLn(s);
if s = AValue then
begin
Result := True;
Exit;
end;
end;
end;