Einzelnen Beitrag anzeigen

Dunedain
(Gast)

n/a Beiträge
 
#1

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

  Alt 28. Feb 2007, 09:37
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
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
  Mit Zitat antworten Zitat