// Hiermit kann man prüfen, ob sich (mindstens) eine Textpassage
// in einer Datei befindet. Der Code wurde eigentlich für Text-
// Dateien geschrieben, kann evtl. aber auch für andere Dateien
// verwendet werden. Man kann festlegen, ob Groß- und Kleinschreibung
// beachtet werden soll, ob nach ganzen Wörtern gesucht werden soll
// und ob Zeilenumbrüche beim Suchen übergangen werden sollen.


// Getestet mit RS 10.4 unter
Win11
uses System.AnsiStrings; 
 
const 
  BST = ['a' .. 'z', 'ä', 'ö', 'ü', 'A' .. 'Z', 'Ä', 'Ö', 'Ü', 'ß']; 
 
var 
  Stop: Boolean = False; 
 
function FindText(aFile: TFilename; Pattern: String; 
  MatchCase, WholeWord, Endofline: Boolean): Boolean; 
const 
  Amount = 1024; 
var 
  LG: Integer; 
  FS: TFileStream; 
  ChrRead, Place: Integer; 
  Buffer, Hlp: AnsiString; 
begin 
  Result := False; 
  LG := Length(Pattern); 
  if not MatchCase then 
    Pattern := LowerCase(Pattern); 
  SetLength(Buffer, Amount); 
  FS := TFileStream.Create(aFile, fmOpenRead); 
  while FS.Position < FS.Size do 
  begin 
    Application.ProcessMessages; 
    if Stop or Application.Terminated then 
      Break; 
    ChrRead := FS.Read(Buffer[1], Amount); 
    if not MatchCase then 
      CharLowerBuffA(PAnsiChar(Buffer), Amount); 
    Hlp := Hlp + Copy(Buffer, 1, ChrRead); 
    if Endofline then 
    begin 
      Hlp := AnsiReplaceStr(Hlp, #13, ''); 
      Hlp := AnsiReplaceStr(Hlp, #10, ''); 
    end; 
    Place := Pos(Pattern, String(Hlp)); 
    if Place > 0 then 
    begin 
      if WholeWord then 
      begin 
        if (Place = 1) or (not CharInSet(Hlp[Pred(Place)], BST)) then 
        begin 
          if Place + LG > Length(Hlp) then 
            continue; 
          if CharInSet(Hlp[Place + LG], BST) then 
            continue; 
          Result := True; 
          Break; 
        end 
        else 
          continue; 
      end 
      else 
      begin 
        Result := True; 
        Break; 
      end; 
    end; 
  end; 
  Buffer := ''; 
  Hlp := ''; 
  FS.free; 
end; 
 
// Beispielaufruf 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  GanzesWort, GrossKlein, ZeilenEnden: Boolean; 
begin 
  GanzesWort := True; 
  GrossKlein := False; 
  ZeilenEnden := False; 
  if FindText('Unit6.pas', 'thintwindow', GrossKlein, GanzesWort, ZeilenEnden) 
  then 
    ShowMessage('Begriff wurde in der Datei gefunden') 
  else 
    ShowMessage('Mit der aktuellen Einstellung nichts gefunden'); 
end; 
 
// Suche bei großen Dateien abbrechen 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Stop := True; 
end;
 
Zugriffe seit 6.9.2001 auf Delphi-Ecke