Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Suchen + Ersetzten in großen Dateien: Optimieren/Verbessern (https://www.delphipraxis.net/87401-suchen-ersetzten-grossen-dateien-optimieren-verbessern.html)

Dunedain 28. Feb 2007 09:37


Suchen + Ersetzten in großen Dateien: Optimieren/Verbessern
 
Morgen^^

hab mir vor einiger Zeit mal en Prog geschrieben, mit dem ich in mehreren Dateien nach bestimmen Begriffen aus einer Liste suche, und diese durch Begriffe aus einer anderen Liste ersetzte; Oder aber nur einen, dafür aber mehrzeiligen Begriff.

Habs mir dabei sehr leicht gemacht:
  • Datei (vollständig) in den Speicher laden
  • Suchen und ersetzten
  • Neue Daten zurückschreiben
Leider ist die exe irgendwie beschädigt worden, Source find ich auch nicht mehr :shock:
:arrow: Neuschreiben. Aber besser :)

Meine Ansatzpunkte für die Verbesserung bzw. die Optimierung sind "Speicherschonung", d.h.: Blockweises lesen und schreiben, die Verwendung eines speziellen Suchalgorithmus, sowie die Bearbeitung der Dateien durch Threads...
So weit auch kein Problem (dachte ich zumindest)

Ich glaube, der Boyer-Moore-Horspol Algorithmus zur Suche deckt meine Bedürfnisse hier ab. Aber dass ist nicht die eigentliche Problemstellung. Die kommt nämlich durch das Blockweise auslesen "zu Stande".

<Beispiel> Datei (Punkte trennen die Blöcke, also 4 Zeichen pro Block)
abcd . efgh . ij\r\n .
klmn . opqr . stuv

<Beispiel> Suchbegriff
ghij\r\nkl

Wie man sieht, "erstreckt" sich der Suchbegriff über drei Blöcke, d.h. ich kann den Algorithmus in diesem Fall nicht anwenden, weil der Suchbegriff nicht vollständig in einem Block enthalten ist (Was ja durchaus vorkommen kann).


Gibt es für die von mir angestrebte Vorgehensweise vielleicht schon eine Algorithmus Definition, die ich implementieren könnte?

Oder "optimiere" ich an der falschen Stelle? Bei beispielsweise einer Blockgröße von 4096 Byte wird der Unterschied zwischen boyer-moore-horspol und den einfachen String-Pos Funktionen warscheinlich nicht sehr deutlich ausfallen...?


Bin für jede Art von Feedback, egal ob Kritik, Lösungsansätze, Ideen oder Verweise auf Informationen sehr dankbar :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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