this slowpoke moves

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

Translate