![]() |
hex wert in datei suchen
hey there...
kann mir einer sagen wie ich mit delphi 7 hex (z.B.: FF2DE7) strings in dateien suchen kann??? hat jemand villeicht noch nen quellcode oder so?? soll aber auch für grosse dateien geeignet sein danke schon mal im vorraus... |
Re: hex wert in datei suchen
Herzlich willkommen in der Delphi-PRAXiS.
Du kannst nach dem Prinzip des sliding window suchen. Der Beispielcode ist nicht hoch-performant, aber hat dafür didaktische Vorzüge. Es wird nach Leerzeilen gesucht.
Delphi-Quellcode:
Freundliche Grüße vom marabu
uses
Types, Math; procedure ProcessMessages; // hält die Nachrichtenschleife in Gang var Msg: TMsg; begin if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; function LocateHex(s: TStream; hex: TByteDynArray; out iPos: Int64): Boolean; // gesucht wird ab der aktuellen Position var buf: TByteDynArray; i, iBuf, iGot, iNeed: Integer; iHave: Int64; begin iBuf := Length(hex); SetLength(buf, iBuf); iNeed := iBuf; repeat iHave := s.Size - s.Position; iGot := s.Read(buf[iBuf - iNeed], Min(iHave, iNeed)); Result := CompareMem(@buf[0], @hex[0], Length(hex)); iNeed := 1; Move(buf[iNeed], buf[0], iBuf - iNeed); ProcessMessages; until Result or (iGot = 0); if Result then iPos := s.Position - iBuf else iPos := -1; end; procedure TDemoForm.Button2Click(Sender: TObject); var iPos: Int64; bda: TByteDynArray; fs: TFileStream; fn: TFileName; st: String; begin // gesucht wird eine Leerzeile st := #13#10#13#10; SetLength(bda, Length(st)); Move(st[1], bda[0], Length(st)); fn := ChangeFileExt(ParamStr(0), '.dpr'); fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyNone); while LocateHex(fs, bda, iPos) do begin ShowMessage(IntToStr(iPos)); fs.Position := fs.Position - 2; end; fs.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz