AGB  ·  Datenschutz  ·  Impressum  







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

string kommt in datei vor?

Ein Thema von Pseudemys Nelsoni · begonnen am 6. Jan 2004 · letzter Beitrag vom 7. Jan 2004
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: string kommt in datei vor?

  Alt 7. Jan 2004, 02:52
Delphi-Quellcode:
function TForm1.SearchForStringInDLL(const DLLFilename, aText: String): Integer;
{Quick and Dirty SuchAlgo für Zeichenketten in einer binären Datei
D.h. es muss nicht unbedingt eine DLL sein. Es funktioniert mit jedem
Dateiformat.
Wenn der SuchText nicht gefunden wurde, gibt die Funktion -1 zurück.}

var
  Filestream : TFilestream;
  HelpStr : String;
  ReadLen : Integer;
  TextLen : Integer;
begin
  Result:=-1; // Default Ergebnis
  ReadLen:=Length(aText); // Wieviel Bytes sollen aus dem Stream gelesen werden
  SetLength(HelpStr,ReadLen); // Hilfsvariable auf die Länge des Suchtextes setzen
  TextLen:=ReadLen; // Länge des Suchtextes merken
  Filestream:=TFilestream.Create(DLLFilename,fmOpenRead); // Stream öffnen
  Try
    Filestream.Seek(0,soFromBeginning); // Position sicherheitshalber auf den Anfang setzen
    While Filestream.Position<Filestream.Size do
      begin
      Filestream.Read(Pointer(HelpStr)^,ReadLen); // ReadLen Zeichen aus dem Stream lesen
      ListBox1.Items.Add(HelpStr); // Für Testzwecke
      Label5.Caption:=IntToStr(Filestream.Position);
      Application.ProcessMessages; // Für Testzwecke
      {ReadLen enthält nach Filestream.Read die Anzahl der gelesen Zeichen.
      Wenn am Ende nicht TextLen Zeichen gelesen wurden wurde das Dateiende
       erreicht und der gesuchte String kann nicht enthalten sein}

      If Readlen=TextLen then
        begin
        If HelpStr=aText then // SuchText gefunden
          begin
          {Von der aktuellen Position, die jetzt ein Zeichen hinter dem
          SuchText steht wird jetzt die Länge des SuchTextes abgezogen.
          Dann steht in Result die Position des ersten Zeichenes des
           SuchTextes}

          Result:=Filestream.Position-TextLen;
          Exit;
          end
            else
              {Nicht gefunden. D.h. Position auf das nächste Zeichen setzen.
              Da die aktuelle Position ein Zeichen hinter den gelesenen
              Zeichen ist, muss (TextLen-1) Zeichen im Strema nach "links"
              gegangen werden, damit die neue Position für Filestream.Read
              ein Zeichen hinter der letzten Position ist. Aber nur, wenn
               noch TextLen Zeichen gelesen werden können.}

              If (Filestream.Position+TextLen)<Filestream.Size then
                Filestream.Seek(-(TextLen-1),soFromCurrent);
        end;
      end;
  Finally
    Filestream.Free;
    end;
end;
Das ist doch schon alles. Wenn du dein 'Hallo' in der DLL blablub.dll finden willst:
Delphi-Quellcode:
if SearchForStringInDLL('blablub.dll', 'Hallo') > -1 then
  ShowMessage('Gefunden.')
else
  ShowMessage('Verdammt, wieder nichts.');
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
 


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 09:42 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