Okay... Ich habe es jetzt so gelöst (und meinen Bedürfnissen angepasst):
Delphi-Quellcode:
function FindInFile(const FileName : string; SearchWord : string) : TIntArray;
var
fs : TFileStream;
Buffer : array [1..10000] of Char;
Size : Integer;
idx : Integer;
i : Integer;
begin
SetLength(Result, 0);
idx := 1;
fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone);
try
Repeat
Application.ProcessMessages;
Size := (Fs.Size - Fs.Position);
if Size > 10000 then
Size := 10000;
Fs.ReadBuffer(Buffer, Size);
for i := 1 to Size do
begin
if (Buffer[i] = SearchWord[idx]) then
Inc(idx)
else
idx := 1;
if (idx = Length(SearchWord)) then
begin
SetLength(Result, Length(Result) + 1);
Result[High(Result)] := (fs.Position - Size) + i - idx + 1;
idx := 1;
end;
end;
until fs.Position >= fs.Size;
finally
fs.Free;
end;
end;
TIntArray ist ein Integerarray!
Das größere Problem ist jetzt, dass ich auch noch den Wert benötige. Ich suche ja nach "<dep file="" und müsste nun an den Zwischenraum kommen (bis zum "/>)... Mal sehen, wie ich das mache!