Text in Dateien SCHNELL ersetzen



  • Hallo erstmal,

    ich will ein Programm schreiben, das zum Teil auch größere Dateien nach einem Text durchsucht, und die ganze Zeile mit einer anderen ersetzt. Also einfach einen Text ersetzen. Bisher hab ich das immer mit einem Trick gemacht, indem ich Zeile für Zeile nach dem Suchwort durchsucht und in eine andere Datei kopiert habe. Sobald der Text gefunden wurde, wird eben eine andere Zeile an Stelle der eigentlichen eingefügt. Dann wird der Text aus der Hilfsdatei wieder zurück in die eigentliche Datei kopiert.
    Das geht auch ganz prima, ist aber ein enormer Aufwand und bei großen Dateien und dann auch öfters, extrem langsam.

    Deshalb meine Frage:

    Wie kann ich Text in einer Datei so schnell ersetzen, dass ich auch Dateien von mehreren Megabytes öfters durchsuchen kann, und es nicht so lange dauert? Ist das überhaupt schnell möglich?

    Jetzt schonmal danke für eure Antworten.

    P.S.: Es reicht mir und wäre mit sogar lieber, wenn nur einmal und nicht mehrmals ersetzt wird.



  • also: schnelles ersetzen geht eigentlich nur, wenn der neue string exakt so lang ist wie der alte, da du dann einfach direkt in die datei schreiben kannst. also stringmatch, die länge des strings zurückseeken und dann schreiben. sonst wirst du nicht um ein kopieren herum kommen.

    was du machen kannst, ist nicht zeilenweise sondern immer in blöcken einzulesen. das spart eine suchdurchlauf über den text nach dem zeilenendzeichen. dafür musst du dich dann selber drum kümmern. ist aber nicht übermäßig schwierig. 😉
    wenn die datei hinreichend klein ist also nur wenige megabyte, kannst du sie auch einfach vollständig in den speicher laden und auch deine temporäre kopie vollständig im speicher halten und dann in einem rutsch die daten zurückschreiben.

    zum anderen hilft auch die verwendung eines schnellen suchalgorithmuses, wenn du nach wörtern suchst. etwa der knuth-morris-pratt algorithmus oder noch ein stück besser boyer-morre. die schlagen natürlich nur zu, wenn die io nicht der bremsende faktor ist, also die dateien bereits im cache liegen, wenn nicht hilft dir auch der beste algo nichts.


Anmelden zum Antworten