Code-Beispiel
Eine schnelle StringReplace-Funktion
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
LGPL | theta | 19.05.2012 |
Noch eine StringReplace-Funktion, die aber auf alle(?) doppelte Analysen verzichtet, so dass sie besonders schnell ist.
Danke an ytwinky für das continue do :)
Syntax: StringReplace(zu durchsuchender String, zu ersetzender String, das Ersetzende, [Startposition])
Function StringReplace(byref text As String, expression As String, replacedBy As String, start As UInteger=1) As String
Dim As Integer i=start-2, l_expr=Len(expression)-1, l_repl=Len(replacedBy)-1,j
Dim As Integer l_text=Len(text),l_new_text=l_text
Dim As String new_text=text
Dim As Ubyte Ptr Expr_=StrPtr(expression)
If l_expr+1 > l_text Or l_expr<0 Or start > l_text Then Return text
Do
Asm inc dword Ptr [i]
For j=0 To l_expr 'jeden Buchstaben von expression mit dem Entsprechenden von new_text vergleichen
If new_text[j+i]<>expr_[j] Then Continue Do
Next
'hier kommen wir nur hin, wenn alle Buchstaben der beiden Teile übereinstimmen
new_text=Left(new_text,i) + replacedBy + Mid(new_text,2+i+l_expr)
i += l_repl 'einen folgenden Teil müssen wir uns nicht anschauen, den kennen wir ja (replacedBy)
l_new_text += l_repl-l_expr 'wir haben etwas geändert, also kann sich auch die Länge geändert haben
'--------------------------------------------------
'ein Buchstabenpaar war nicht gleich, wir fangen von vorne an
Loop Until i=l_new_text
Return new_text
End Function
Beispiel:
Dim As String dest, src="Dies ist ein besonders langer Text!",expr="ein",repl="kein"
Dim As Double T
sleep 10000 'falls man den Schnellstart wählt, kann es sein, dass der Prozessor schon beschleunigt(hat)
t=Timer
For i As Integer=1 To 1000000 '1 Mio. Mal
dest=StringReplace(src,expr,repl)
Next
Print "Das hat";Timer-t;"s lang gedauert"
Print dest
GetKey
Hinweis: Wer einen schnelleren Algorithmus findet, kann diesen von mir aus sehr gerne hier einsetzen, wenn er/sie mit meiner Lizenzwahl einverstanden ist!
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 08.04.2012 von theta angelegt.
- Die aktuellste Version wurde am 19.05.2012 von theta gespeichert.
|
|