Hallo.
Ich habe noch ein wenig weiter herum experimentiert
und erlaube mir nun, noch ein paar meiner Ergebnisse zu präsentieren.
Zunächst:
Wenn ich das richtig verstanden habe, soll der Mid$- Befehl so arbeiten:
Ersetze in einem String
einen Teilstring variabler Länge
durch einen Ersatzstring variabler Länge.
Teilstring und Ersatzstring müssen nicht gleich lang sein.
Eure Versionen funktionieren dann sehr schnell und gut,
wenn der Teil- und der Ersatzstring gleich lang sind.
ReplaceString ist dann gut, wenn die Bedingungen nur einmal erfüllt sind.
Beispiel:
Code: Alles auswählen
a$="Das ist so, das war so, das wird immer so bleiben!"
Debug a$
alt$="so"
neu$="das"
Debug ReplaceString(a$,alt$,neu$,0,10)
Hier nun noch meine Varianten für diejenigen,
die Lust haben, noch weiter zu experimentieren.
Code: Alles auswählen
Procedure.s ErsetzeString1(String$,pos,laenge,ersatz$)
ProcedureReturn Left(String$,pos-1)+ersatz$+Mid(String$,pos+laenge)
EndProcedure
Macro ErsetzeString2(String,pos,laenge,ersatz)
Left(String,pos-1)+ersatz+Mid(String,pos+laenge)
EndMacro
Macro ErsetzeString3(String , pos , laenge , Ersatz)
len_original = Len(PeekS(@String)) * SizeOf(Character)
l1 = pos+laenge-1
len_rest = len_original - l1
b$=PeekS(@String,pos-1) + Ersatz + PeekS(@String+l1, len_rest)
EndMacro
; --------------------
; Der Originalsatz
a$="Das war einmal der Satz"
Debug a$
Debug ""
; Das hier, weil ich zu faul zum selber Zaehlen bin
; und weil Änderungen ja später vom Prg. generiert werden könnten
lmax = Len(a$)
alt$ = "war einmal"
neu$ = "ist nun"
pos = FindString(a$,alt$)
laenge = Len(alt$)
; Ein Füllzeichen, wenn der Str. seine Länge behalten soll.
fuell$="."
; Nun der neue Satz 1
zeit=ElapsedMilliseconds()
For i=1 To 1000000
b$=ErsetzeString1(a$,pos,laenge,neu$)
Next
Debug "Zeit 1 = "+Str(ElapsedMilliseconds()-zeit)+" MilliSek."
Debug b$
Debug LSet(b$ ,lmax,fuell$)
Debug RSet(b$ ,lmax,fuell$)
Debug ""
; Nun der neue Satz 2
; Meine schnellste und übersichtlichste Lösung
zeit=ElapsedMilliseconds()
For i=1 To 1000000
b$=ErsetzeString2(a$,pos,laenge,neu$)
Next
Debug "Zeit 2 = "+Str(ElapsedMilliseconds()-zeit)+" MilliSek."
Debug b$
Debug LSet(b$ ,lmax,fuell$)
Debug RSet(b$ ,lmax,fuell$)
Debug ""
; Nun der neue Satz 2
zeit=ElapsedMilliseconds()
For i=1 To 1000000
ErsetzeString3(a$,pos,laenge,neu$)
Next
Debug "Zeit 3 = "+Str(ElapsedMilliseconds()-zeit)+" MilliSek."
Debug b$
Debug LSet(b$ ,lmax,fuell$)
Debug RSet(b$ ,lmax,fuell$)
Debug ""
; Nun der neue Satz 4
zeit=ElapsedMilliseconds()
For i=1 To 1000000
b$=ReplaceString(a$,alt$,neu$)
Next
Debug "Zeit 4 = "+Str(ElapsedMilliseconds()-zeit)+" MilliSek."
Debug b$
Debug LSet(b$ ,lmax,fuell$)
Debug RSet(b$ ,lmax,fuell$)
Gruß: BSP