![]() |
Datei nach String durchsuchen
Mit folgendem Code kann man Dateien nach einem bestimmten String durchsuchen lassen. Dani hat ihn
![]()
Delphi-Quellcode:
Suchwörter: Wort Worte finden suchen auflisten
function TForm1.ScanFileForString(aFile, SearchString: String; IgnoreCase: Boolean=true;
MaxBytesScanned: Int64 = 2097152): Boolean; const MAX_BUFFER_SIZE = 20480; //20 kb var Buffer: String; FS: TFileStream; BytesRead: Integer; i, match: Integer; BufferSize, StrLength: Integer; begin Result := false; if (SearchString = '') then exit; if IgnoreCase then SearchString := ANSIUppercase(SearchString); //Datei öffnen... falls das nicht klappt gibts hier ne Exception //daher die Funktion besser im try..except Schutzblock aufrufen! FS := TFileStream.Create(aFile, fmOpenRead or fmShareDenyWrite); try BufferSize := 0; StrLength := Length(SearchString); //Ermitteln wie groß der Puffer sein muss. Er soll ca. 20 kb groß sein, //wenn nicht die ganze Datei reinpasst if FS.Size <= MAX_BUFFER_SIZE then BufferSize := FS.Size else BufferSize := (MAX_BUFFER_SIZE div StrLength) * StrLength; SetLength(Buffer, BufferSize); Repeat //Höchstens MaxBytesScanned Bytes untersuchen oder bis EOF BytesRead := FS.Read(Buffer[1], BufferSize); if BytesRead = 0 then exit; if IgnoreCase then Buffer := ANSIUppercase(Buffer); for i:=1 to BytesRead do begin if Abbruch then exit; Application.ProcessMessages; match := 0; if (BufferSize-(i-1) >= StrLength) then while (Buffer[i+match] = SearchString[match+1]) do begin if Abbruch then exit; Application.ProcessMessages; inc(match); If match = StrLength then begin Result := true; //exit; end; end; end; Until (FS.Position >= MaxBytesScanned) or (FS.Position = FS.Size); finally FS.Free; SetLength(Buffer, 0); end; end; |
Re: Datei nach String durchsuchen
Hallo,
ich behaupte das der Code einen Bug enthält. Was passiert wenn die Mitte des gesuchten Strings auf der Buffersizegrenze liegt? Dann wird beim ersten Read nur die erste Hälfte des gesuchten Strings eingelesen. Folge: Der Srting wird nicht gefunden. Beim zweiten Read wird die zweite Hälfte des gesuchten Strings eingelesen Folge: Der Srting wird nicht gefunden. |
Re: Datei nach String durchsuchen
Liste der Anhänge anzeigen (Anzahl: 1)
Von Jens Schumann kommt noch folgender weiterer Tipp (ist mir leider beim Teilen des Beitrages versehentlich abhanden gekommen):
Zitat:
[edit=Matze]Attachment hinzugefügt. MfG, Matze[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz