Im Prinzip ja, nur tauscht das nur
einen Begriff gegen
einen anderen aus.
Hast Du mehrere Änderungen, mußt Du die Procedure auch mehrmals aufrufen und
jedesmal wird das ganze File eingelesen und wieder zurückgeschrieben. Allerdings kannst Du auch mehrere Stellen bei einem einlesen ändern, indem Du mehrere Paare Such- und Ersatz-Strings übergibst und mehrmals das replace durchführst.
Bedingung ist dabei allerdings, daß du
vorher weißt, was in der Datei steht (der Suchstring). Und das ist selten der Fall. Normal ist in INIs oder CONFIGs, daß die
Stelle des betreffenden Suchstrings über eine Bedingung bekannt ist, nicht aber der Inhalt (des Suchstrings).
Z.B;
[DATENPFAD]
C:\Meier\Daten\
oder
DATENPFAD = C:\Meier\Daten\
D.h.
man sucht nach den Bedingungen, denn den dort stehenden Begriff kennt man ja nicht (kann auch leer oder garnicht vorhanden sein).
Also im ersten Beispiel die Zeile(n) nach "[DATENPFAD]",
im zweiten Beispiel den Begriff hinter "DATENPFAD =".
In dem Code wird in einen String eingelesen. Den kann man natürlich auch nach den Bedingungen abklappern, nicht zu verändernde Teile ausschneiden, in einen zweiten Zielstring einfügen, zu verändernde Teile auch ausschneiden und geändert/ergänzt in den Zielstring ... das ganze wirkt dann im Prinzip wie ein Schiebepuffer. Das "Problem" bei Schiebepuffern ist nur die Verwaltung des/der Laufzeiger - das erfordert Disziplin.
Es gibt auch Funktionen, die ein TextFile direkt in eine Stringlist einlesen (auf CR,LF achten)[//1], habe ich aber noch nie benutzt, weil ich TextFiles ganz klassisch[//2] in eine Liste einlese (und nachher wieder wegschreibe) und deshalb kenne ich den Namen nicht einmal - aber ist schnell im Web oder im Forum zu finden.
Du kannst auch in deinem Code
- an Stelle der Zeile 13 dieses StringReplace weglassen und den dort vorhandenen String in eine Liste packen (immer bis CR/LF abschneiden = neue Listenzeile),
- dann deine Bedingungen in der Liste abklappern, gegebenenfalls ändern, ergänzen, löschen
- dann die Liste in den String zurückschreiben,
-und mit Zeile 14 weitermachen (Datei zurückschreiben).
Allerdings ist dann die klassische Methode, direkt in die Stringlist einlesen und direkt daraus wieder wegschreiben schneller (in Bezug auf die Anzahl der CodeZeilen).
Resumee:
- Benutz die Methode [1], ein TextFile direkt in eine StringList einzulesen (die mir nicht namentlich bekannt Prc)
-oder lies klassisch ein [2].
Meiner Meinung nach ist die Programmpflege mit einer StringList wesentlich einfacher als mit einem Schiebepuffer. Vorallem ist der Code auch nach Jahren noch besser nachzuvollziehen. Und Du weisst nicht, was noch alles geupdatet werden soll.
FF