Search String in File

Mit dieser Funktion lassen sich Strings aller Art in Dateien suchen.

Der Rückgabewert ist die Position des zu suchenden Strings, bei einer Fehlsuche gibt die Funktion -1 wieder.
function FindInFile(const FileName   : string;
                    SearchWord : string; MatchCase : Boolean) : Integer;
var
  fs     : TFileStream;
  Buffer : array [1..10000] of Char;
  Size   : Integer;
  idx    : Integer;
  i      : Integer;
begin
  Result := -1;
  idx := 1;
  if not MatchCase then
   SearchWord := UpperCase(SearchWord);
  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);
      if not MatchCase then
      begin
        for i := 1 to Size do
          Buffer[i] := Uppercase(Buffer)[i];
      end;
      for i := 1 to Size do
      begin
        if (Buffer[i] = SearchWord[idx]) then
          Inc(idx)
        else
          idx := 1;
        if (idx = Length(SearchWord)) then
        begin
          Result := (fs.Position - Size) + i - idx + 1;
          Exit;
        end;
      end;
    until fs.Position >= fs.Size;
  finally
   fs.Free;
  end;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IntToStr(FindInFile('c:\1.txt', // Pfad der Datei
                                        'idx', // Der String der gesucht werden soll
                                        true));// Suche aktivieren
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts