![]() |
Suchen und ersetzen in Dateien
Quick_silver zeigt in
![]()
Delphi-Quellcode:
procedure TForm1.PatchFile(const path, searchFor, replaceWith:string);
var r,i,j:integer; f: file of byte; offset:array of integer; buf:array [0..1023] of byte; workBuf:array of byte; begin ProgressBar.Max := GetFileSizeEx(path); ProgressBar.Position := 0; //searchFor -> workbuf SetLength(workBuf, Length(searchFor)); for i:=0 to Length(workBuf)-1 do workBuf[i]:=Ord(searchFor[i+1]); //Durchsuchen assignfile(f,path); reset(f); repeat if filepos(f) > Length(workBuf) then seek(f, filepos(f)-Length(workBuf)); blockread(f,buf,Length(buf),r); ProgressBar.StepBy(Length(buf)); //buf nach workBuf durchsuchen for i:=0 to Length(buf)-1 do //buf durchgehen begin if i >= r then break; //Ausserhalb des Buffers abbrechen for j := 0 to Length(workBuf)-1 do //Suchstring bei i durchgehen begin if buf[i+j] = workBuf[j] then //Anfang gefunden! begin if j = Length(workBuf)-1 then //Komplett gefunden! begin SetLength(offset,Length(offset)+1); offset[Length(offset)-1] := filepos(f) - r + i; //offset[n] gibt die Position des workBuf[0] wieder end; end else //Nicht komplett gefunden! begin break; end; end;// for end; until r < Length(Buf); //Alles was gefunden wurde steht in offset... //Gefundenes ersetzen: //replaceWith -> als Byte -> workBuf SetLength(workBuf,Length(replaceWith)+1); for i:=0 to Length(workBuf)-1 do workBuf[i] := Ord(replaceWith[i+1]); //An jedem Offset ersetzen: for i:=0 to Length(offset)-1 do begin Seek(f, offset[i]); BlockWrite(f, workBuf[0], Length(workBuf),r); end; closefile(f); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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