Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Stringfunktionen

Eine schnelle StringReplace-Funktion

Lizenz:Erster Autor:Letzte Bearbeitung:
LGPLMitgliedtheta 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 Mitgliedtheta angelegt.
  • Die aktuellste Version wurde am 19.05.2012 von Mitgliedtheta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen