Code: Alles auswählen
Define.s zdZk ; zu durchsuchende Zeichenkette
zdZk="Da lagen einige junge Schwalben zerschmettert am Boden. Erstaunt "+
"untersuchte ich die Sache und fand heraus, dass die Schwalben selbst ihre "+
"Jungen aus den Nestern geworfen hatten!"
CreateRegularExpression(0, "dass\b")
zdZk=ReplaceRegularExpression(0, zdZk, "daß")
FreeRegularExpression(0)
Debug zdZk
Nun ist die eigentliche Anwendung natürlich um einiges komplexer: Ich habe eine Datei erstellt, bei der in jeder Zeile Suchausdruck und Ersetzungstext nebeneinander stehen und manche Zeilen wie oben den regulären Ausdurck \b (Wortgrenze) enthalten; später sollen ausgefeiltere reguläre Ausdrücke dazukommen dürfen. Sie sieht etwa so aus:
usw.dass\b daß
Essst Eßst
ewusst ewußt
isschen ißchen
lässt\b läßt
lussst lußst
Missst Mißst
musst mußt
Die Idee ist dabei, diese Datei mit Such- und Ersetzungsausdrücken auf Textdateien in neuer Rechtschreibung anzuwenden und sie in die alte Rechtschreibung zurückzuüberführen. Da die umzuwandelnden Dateien z.T. sehr groß sind, wird deren Inhalt zuerst in den Arbeitsspeicher und vor dort in einen String geschrieben (dieser Teil des Kodes funktioniert). Dieser String wird dann durchsucht und alle vorkommenden Wörter in alter Rechtschreibung ersetzt. Im folgenden Beispiel ist der Inhalt der Datei zuD identisch mit dem des Strings zdZk von oben:
Code: Alles auswählen
#Ed="D:\Ersetzung neue Rechtschreibung Wortliste.txt"
Define KrA ; Kennzeichner regulärer Ausdruck
Define.s zuD, ZmrA, rA, Wed ; zu überprüfende Datei, (Zeile mit) regulärem Ausdruck, Wort ersetzen durch
zuD="D:\umzuwandelnder Text.txt"
ReadFile(0, #Ed, #PB_Unicode) ; Datei mit Suchmustern öffnen
If ReadFile(1, zuD, #PB_Unicode) ; Öffnen der Datei erfolgreich
ReadStringFormat(1) ; setzt den Dateizeiger an das Ende der BOM
Define *P, Dl, Di.s ; Puffer, Dateilänge, Dateiinhalt
Dl=Lof(1)
*P=AllocateMemory(Dl, #PB_Memory_NoClear) ;
If *P
ReadData(1, *P, Dl) ; Datei ab Adresse *P in den Puffer schreiben
Di=PeekS(*P) ; liest den kompletten Puffer aus und schreibt
FreeMemory(*P) ; ihn in die Zeichenkette Di
EndIf
CloseFile(1)
EndIf
While Not Eof(0)
ZmrA=ReadString(0) ; Zeile mit regulärem Ausdruck einlesen
rA=StringField(ZmrA, 1, " ") ; regulären Ausdruck extrahieren
Wed=StringField(ZmrA, 2, " ") ; Ersetzungsausdruck extrahieren
KrA=CreateRegularExpression(#PB_Any, rA)
Di=ReplaceRegularExpression(KrA, Di, Wed)
Debug Di
FreeRegularExpression(KrA)
Wend
CloseFile(0) ; Datei mit Suchmustern schließen
If CreateFile(2, zuD, #PB_Unicode) ; Pfad zur Zieldatei
WriteStringFormat(2, #PB_Unicode)
WriteString(2, Di): CloseFile(2)
EndIf
Code: Alles auswählen
KrA=CreateRegularExpression(#PB_Any, rA)