AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

hex wert in datei suchen

Ein Thema von lbccaleb · begonnen am 25. Mai 2006 · letzter Beitrag vom 25. Mai 2006
Antwort Antwort
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#1

hex wert in datei suchen

  Alt 25. Mai 2006, 01:29
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...
Martin
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: hex wert in datei suchen

  Alt 25. Mai 2006, 11:14
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:
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;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz