ich stehe mal wieder vor einem Problem bei dem ich nicht weiter komme.
Mit folgender Funktion will ich eine Kopie von sehr großen Textdateien erzeugen. In der neu erstellten Kopie der Textdatei sollen auch noch bestimmte Zeichen ersetzt werden.
Die Anzahl der zu ersetzenden Zeichen variiert, weshalb ich eine variadische Funktion gewählt habe. (im folgenden Beispiel mit 3 optionalen Parametern)
Hier also erstmal das Programm:
Code: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Pfad := "C:\Windows\Temp\"
Originaldatei := "test.txt"
Ersetzen(Pfad,Originaldatei,"A|B","E|F","X|Y") ; A soll durch B ersetzt werden, E -> F etc...
Ersetzen(Pfad,Originaldatei,oParams*){
oFile := FileOpen(Pfad . Originaldatei, "r") ; Datei lesend öffnen
oEditFile := FileOpen(Pfad . "test2.txt", "w") ; Neue Datei erzeugen & schreibend öffnen
Loop, % oParams.Length() ; Schleife über alle vorhandenen optionalen Ersetzungsparameter
{
oFile.Pos := 0 ; Zeiger (wieder) auf Anfang
oEditFile.Pos := 0 ; Zeiger (wieder) auf Anfang
aReplace := StrSplit(oParams[A_Index], "|") ; Ersetzungsparameter in Array speichern / z.B. aReplace[1]=A aReplace[2]=B
While !oFile.AtEOF ; in Schleife zeilenweise die Zeichen ersetzen falls vorhanden
{
Str_Renamed := oFile.ReadLine()
Str_Renamed := StrReplace(Str_Renamed, aReplace[1], aReplace[2], ErsetzteVar)
if (ErsetzteVar!=0) ; Debug / zur Info was ersetzt wird
msgbox % Str_Renamed ; Debug / zur Info was ersetzt wird
oEditFile.Write(Str_Renamed) ; hier muss der Fehler sein weil nur der letzte Durchlauf geschrieben wird / was fehlt?
}
}
oEditFile.Close()
oFile.Close()
return
}
Code: Select all
A
B
C
D
E
F
G
H
I
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Über eure Hilfe würde ich mich sehr freuen