AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String in 3 MB großen Dateien suchen
Thema durchsuchen
Ansicht
Themen-Optionen

String in 3 MB großen Dateien suchen

Ein Thema von Uncle Cracker · begonnen am 11. Jun 2004 · letzter Beitrag vom 13. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 12:27
Ich habe jetzt mal eine Frage: Gibt es eine Möglichkeit Strings in Dateien zu suchen die Größer sind als 3 MB (Datei)?

Ich habe zwar schon einiges gefunden, aber da werden nur 1MB der Datei durchsucht Gibt es vielleicht eine Methode der die Größe der Datei egal ist?

Vielleicht hat das schonmal jemand gemacht und kann mir helfen.


Danke UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 12:29
Zitat von Uncle Cracker:
Ich habe zwar schon einiges gefunden, aber da werden nur 1MB der Datei durchsucht
Gib mal ein Beispiel - warum sollte das nicht mit größeren Dateien funktionieren

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#3

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 12:39
Es wird zwar hier nicht nach einem String sondern nach Hexwerten gesucht, ist aber das gleiche (eine Methode von himitsu):

Delphi-Quellcode:
  Const Groesse = 3072000; // 3000 KB ~ 3 MB = 3000 * 1024 = 3072000 Byte

  Var FS: TFileStream;
    Buffer: Array[0..Groesse-1] of Byte;
    I: Integer;
    B: Byte;

  Begin
    Try
      {Datei öffnen}
      FS := TFileStream.Create('C:\Test.exe', fmOpenReadWrite);
      {Daten einlesen}
      FS.Read(Buffer, Groesse);
      {Bytefolge suchen}
      For I := 0 to Groesse - 3 do
        If (Buffer[I] = $78) and
          (Buffer[I + 1] = $78) and
          (Buffer[I + 2] = $78) Then Begin
          Showmessage('Gefunden')
        End;
      FS.Free;
    Except
      On EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden');
      Else ShowMessage('Unbekannter Fehler');
    End;
  End;

Wenn ich das jetzt mache kommt ein Stack-Überlauf, da wahrscheinlich die Größe für den Buffer wahrscheinlich zu groß ist. Aber man muss doch über Buffer suchen oder etwa nicht
Gibt's da noch eine andere Möglichkeit?
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#4

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 13:09
Die einfachste Möglichkeit dürfte es sein, die maximale Stackgröße mit
{$MAXSTACKSIZE 4000000}  // max. Stackgröße etwa 4 MB entsprechend zu erhöhen.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#5

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 13:11
Danke funktioniert, hat das irgendwelche Nachteile bzw. muss ich den Stack dann am Ende wieder "runterschrauben"?
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#6

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 13:25
Zitat von Uncle Cracker:
hat das irgendwelche Nachteile
Soweit ich weis nicht, aber da sollte vielleicht noch mal jemand schreiben der sich mit Stack, Heap, etc. besser auskennt.
Zitat von Uncle Cracker:
muss ich den Stack dann am Ende wieder "runterschrauben"
Nein, die Einstellung besagt nur wieviel Stack-Speicher maximal von deinem Programm benutzt wird, um alles andere kümmert sich weiterhin Delphi.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#7

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 14:08
Zitat von Uncle Cracker:
Danke funktioniert, hat das irgendwelche Nachteile bzw. muss ich den Stack dann am Ende wieder "runterschrauben"?
die sauberere Lösung wäre, das ganze in den Heap zu verfrachten:

Delphi-Quellcode:
  Var FS: TFileStream;
    {dynamisches Array verwenden}
    Buffer: Array of Byte;
    I: Integer;
    B: Byte;

  Begin
    Try
      {Datei öffnen}
      FS := TFileStream.Create('C:\Test.exe', fmOpenReadWrite);
      {Speicher für Buffer allozieren}
      SetLength(Buffer,FS.Size);
      {Daten einlesen (8ung: Buffer>>[0]<<}
      FS.Read(Buffer[0],Length(Buffer));
      {Bytefolge suchen}
      For I := 0 to Length(Buffer) - 3 do
        If (Buffer[I] = $78) and
          (Buffer[I + 1] = $78) and
          (Buffer[I + 2] = $78) Then Begin
          Showmessage('Gefunden')
        End;
      FS.Free;
    Except
      On EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden');
      Else ShowMessage('Unbekannter Fehler');
    End;
  End;
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#8

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 14:13
Danke schön funktioniert einwandfrei
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#9

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 14:45
Hallo Uncle Cracker,
ich empfehle Dir den Boyer/Moore Algorithmus
Ich habe dort ein Beispiel-Projekt und die Komponente hinterlegt. Außerdem eine kleine
Powerpoint-Präsentation, die den Algo erklärt.
Die Suche läuft knatter schnell.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#10

Re: String in 3 MB großen Dateien suchen

  Alt 11. Jun 2004, 15:23
@JS
Also bei meinem Test mit deiner mitgelieferten Datei stimmte das Ergebnis nicht, dass ich erhalten hatte. Lag vielleicht daran, dass die Datei 2.5 MB groß war.


Noch eine etwas andere Frage die was damit zutun hat, aber ich nicht extra einen neuen Thread aufmachen möchte:

Kann man die die Abfrage nicht eigentlich auch irgendwie einfacher machen also die ganze Zeit immer mit "and" die Werte zuverknüpfen? Vielleicht mit einem Array:

Delphi-Quellcode:
const
  MyArry:array[0..2] of Byte=
 ($78, $78, $78);

Habe das zwar probiert aber das will nicht wirklich, denn die Abfrage mit "Buffer[I] = " bekomme ich irgendwie nicht hin

Hätte vielleicht da noch jemand eine Lösung?


Danke UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:36 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