Ich hab mal das folgende verbrochen um schnell zu prüfen, ob eine Datei einen bestimmten Text enthält (caseinsensitive).
Mit ein bißchen Fleiß, kannste du dir den Teil rausnehmen, den du brauchst.
Delphi-Quellcode:
function FileContainsText(AFileName: String; AText: AnsiString): Boolean;
var
MS : TMemoryStream;
TextBuffer : PAnsiChar;
TextLen : Integer;
FileBuffer : PAnsiChar;
FileBufferLastChar : PAnsiChar;
PosInMemory : Integer;
procedure LowerLastChar();
begin
if FileBufferLastChar^ in ['A'..'Z'] then
FileBufferLastChar^ := AnsiChar(Ord(FileBufferLastChar^) + $20);
end;
begin
Result := false;
Ms := TMemoryStream.Create;
Ms.LoadFromFile(AFileName);
TextLen := Length(AText);
GetMem(TextBuffer, TextLen);
try
StrPCopy(TextBuffer, AnsiString(LowerCase(String(AText))));
FileBufferLastChar := Ms.Memory;
for PosInMemory := 0 to TextLen - 2 do
begin
LowerLastChar;
Inc(FileBufferLastChar);
end;
FileBuffer := Ms.Memory;
PosInMemory := TextLen - 1;
FileBufferLastChar := Pointer(Integer(FileBuffer) + PosInMemory);
while PosInMemory < Ms.Size do
begin
LowerLastChar;
if CompareMem(TextBuffer, FileBuffer, TextLen) then
begin
Result := true;
break;
end;
Inc(PosInMemory);
Inc(FileBuffer);
Inc(FileBufferLastChar);
end;
finally
Ms.Free;
FreeMem(TextBuffer, TextLen);
end;
end;