Suchen/Ersetzen
-
Hallo Leute,
suche nach einem kleinen Programm, das vielleicht einer von euch schon mal geschrieben hat... Dann müsste ich mich nicht nochmal dransetzen...
Ich möchte in einer "Muster"-Datei mehrere Text-Teile suchen und durch Teile gleicher Länge ersetzen. Nach der Änderung soll die Datei unter einem anderen Namen automatisch gespeichert werden. Dann soll wieder die "Muster"-Datei genommen werden, wieder Suchen/Ersetzen und unter einem dritten Namen abspeichern...usw.
Die Teile, nach denen gesucht und durch was ersetzt werden soll sowie den Dateinamen würde ich gerne in einer separaten Datei speichern wollen, so dass diese Daten zur Laufzeit eingelesen werden. Diese separate Datei könnte z.B. so aussehen:
Suchtext#Ersetzen_mit#Neuer_Dateiname
501_#502_
134_#034_#034.psx
%Nächste_Datei
501_#503_
134_#128_#128.psx
%Nächste_Datei
...
...
usw.Einzige Eingabe durch den Anwender sollte die Angabe des Dateinamens der "Muster"-Datei sein - den Rest sollte das Tool von alleine erledigen.
Hat jmd. ähnliches bereits verwirklicht und könnte mir dies zur Verfügung stellen? Sonstige Fragen oder Anregungen? Danke!
Gruß Edward
-
Ich habe so etwas schon gemacht, verwende aber besser XML-Dateien zum Abspeichern und z.B. das Objektmodell TinyXML. http://www.grinninglizard.com/tinyxml/index.html
-
Hallo Erhard,
vielen Dank für den Tip. Habe noch keinerlei Bezug zu XML, werde mich nun aber wohl mal damit befassen!
Für weitere Tips und Anregungen bin ich immer zu haben...Gruß Edward
-
Hm also wenn du keine riesige Dateien hast, dann wäre es recht einfach, die Datei einfach komplett in nen CString zu laden, mit Replace deine gewünschten Muster ersetzen und das Ergebnis dann wieder in eine Datei schreiben(Dateiarbeit mit CFile am besten).
Wenn deine Muster keine Zeilenumbrüche haben, kannst auch das ganze zeilenweise abarbeiten, anstatt die ganze Datei einzulesen.
-
Hi Pellaeon,
die Dateien sind wenige MB groß, wie groß darf der CString denn werden?
Gruß Edward
-
In etwa so groß wie der größte zusammenhängende Speicherblock in Deinem System.
-
Jo CString holt ja seinen Speicher vom Heap, also hängt es vom aktuellen Arbeitsspeicher ab^^
Naja wie gesagt, wenn in dem Muster keine Zeilenumbrüche drinne sind, wäre es wohl sinnvoll mit CStdioFile das ganze in einer Schleife zeilenweise abzuarbeiten. Und das ganze dann natürlich auch abgeändert zeilenweise in die neue Datei schreiben.CStdioFile in; CStdioFile out; //Dateien mit den entsprechenden Flags öffnen, siehe MSDN CString line; while (in.ReadString(line)) { line.Replace(_T("Altes Muster"),_T("Neues Muster")); out.WriteString(line); }Fehlerbehandlung habsch mal weggelassen, damit du auch noch was zu tun hast

Dürfte aber auch einen try-catch-Block hinauslaufen, is also auch nicht so wild.
-
Es sind Zeilenumbrüche drin

Setze mich heute mal dran...
-
Wie sieht denn so ein Muster beispielhaft aus?
-
Kann sie leider nicht uploaden, aber grundsätzlich handelt es sich um eine in Skript-Sprache geschriebene Datei (Javascript, html, usw.). Also recht einfach als Text einzulesen und wieder zu schreiben...