AGB  ·  Datenschutz  ·  Impressum  







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

Binär ersetzen / binäre Suche

Ein Thema von blackdrake · begonnen am 15. Sep 2007 · letzter Beitrag vom 16. Sep 2007
Antwort Antwort
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#1

Re: Binär ersetzen / binäre Suche

  Alt 16. Sep 2007, 10:26
Zitat von blackdrake:
Hallo oki.

Danke für den Tipp. Erscheint zwar logisch, jedoch wäre diese Lösung

a) nicht dynamisch (da kein beliebiges Such/Ersatz-Muster angegeben werden kann. Jedoch ist mein Beispiel statisch)
b) ziemlich langsam, da die Datei ca. 1 MB groß ist.

Wenn man eine 1 MB große Datei byteweiße abgehen und die vorrangehenden Bytes auf das Suchmuster überprüfen würde, wäre das sehr uneffektiv. Gibt es keine bessere Lösung (z.B. eine solche, wie sie in Hex-Editoren bei der Ersatz-Funktion angewandt wird)? Die Methode des byteweisen Abtastens des Streams würde ich nur anwenden, wenn sich keine bessere Methode anbieten würde.

Gruß
blackdrake
Hallo,

das ist eine kapitale Fehleinschätzung. Eine Datei seriell zu lesen und dabei auf Muster zu untersuchen ist grundsätzlich die schnellste Methode. Jede unnötige Verkomplizierung durch VCL-Komponenten macht die Sache nur langsamer, ganz besonders die hier für fast alles empfohlene Methode, erst mal die ganze Datei in eine TStringList einzulesen, die praktisch immer und in diesem Fall ganz besonders blödsinnig ist, weil es sich ja nicht einmal um Text handelt. Nebenbei bemerkt, das Einlesen in eine TStringList muss ja selbst eine Mustererkennung durchführen nach CR-LF, und dann das Gnaze nochmal nach der gesuchten Folge - wer behauptet, dass das durch irgendeine Borland-Zauberei schneller geht als 1 mal direkt, glaubt sicher auch an Weihnachtsmann und Osterhase.

Also lesen und prüfen, ob das nächste Zeichen gleich dem ersten des Vergleichsarrays ist, wenn ja, ist das nächste gleiche dem 2. usw. bis die Länge des Vergleichs erreicht ist, wenn nicht, dann weitersuchen wie zuvor nach dem ersten Zeichen.

Es gibt noch Optimierungen, v.a. für lange Vergleiche, dazu gab es einen c't-Artikel, aber bei so geringen Programmierkenntnissen sollte man sich auf die einfachste Form beschränken.

Gruss Reinhard
  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:33 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