Hi,
ich habe den Code etwas optimiert, das Goto ist weg und Define wurde hinzugefügt.
Code: Alles auswählen
; StringReplace 30.04.2007 Markus Maiwald
; (fast so gut wie das von AHK)
; StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
; text.s =Text der durchsucht wird
; such.s =Suchtext
; ersetz.s =Text der durch den Suchtext ersetzt werden soll
; anzahl.l =Anzahl der ersetzungen ( 0 = alles )
; grosklein.b = 0 => Ohne Groß-Klein unterscheidung
; großklein.b = 1 => 1 : 1 erkennungn
Procedure.s StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
Define.l l,l2,te,start,s,anzahl,ok,t
Define.b grosklein,gk,a,b
Define.s text,text1,text2
If grosklein=0 : gk.b=32 : Else : gk.b=0 : EndIf
l=Len(text.s) : l2=Len(such.s) : te=0 : start=1 : s=0
Repeat
a.b=Asc(Mid(text.s,s,1)) ; asc Zeichen Text
For t=1 To l2 ; loop suchtext
b.b=Asc(Mid(such.s,t+te,1)) ; asc Zeichen Suchtext
If a.b=b.b Or (a.b+gk.b)=b.b Or (a.b-gk.b)=b.b; Groß Klein Schreibung aufheben.
te=te+1 ; Anzahl der Treffer
If te=l2 ; Anzahl der Treffer mit Anzahl der SuchZeichen vergleichen
ok=ok+1 ; Anzahl der gfunden Texte die ersetzt wurden.
text1.s=Left(text.s,s-l2) ; Linke Textseite
text2.s=Right(text.s,l-s) ; Rechte Textseite
text.s=text1.s+ersetz.s+text2.s ; Text zusammen setzen
l=Len(text.s) ; Neue Text Länge
start=s-l2+(Len(ersetz.s))+1 ; Neuer Start berechnen.
te=0 ; Treffer auf null
If anzahl=ok
Break
Else
Continue
EndIf
EndIf
Break
Else
te=0
EndIf
Next t
s=s+1
Until s>l
ProcedureReturn text.s
EndProcedure
Define.s a$,b$,c$
;z.B.
A$="Heute wird am 1.Mai gefeiert."
b$="1.Mai"
c$="18.Mai"
Debug a$
a$=StringReplace(a$,b$,c$,0,1)
Debug a$
a$=StringReplace(a$,"Mai","Juni",0,1)
Debug a$
a$=StringReplace(a$,"gefeiert","gefressen",0,1)
Debug a$
a$=StringReplace(a$,"e","E",2,0)
Debug a$