Kontakt
DSVGO
Historie | |
---|---|
16.08.2004 | Korrektur für Vergleich leerer Strings |
26.10.2000 | Erste Version (nach einer Idee von Donald Lessau) |
VB geht beim Vergleich zweier Strings (z.B. "s1 = s2") ziemlich ungeschickt vor - es wird nämlich jedes einzelne Zeichen (von vorne nach hinten) verglichen. Und dies auch, wenn die Strings unterschiedliche Länge haben, also gar nicht gleich sein können!
Die folgende Funktion ist in den meisten Fällen (insbesondere bei langen Strings) deutlich schneller, da sie erst prüft, ob die beiden Strings überhaupt die gleiche Länge haben. Ausserdem kann bei ihr der Vergleichs-Modus (textuell oder binär) angegeben werden.
MsgBox StrEqual("aaaa", "aaaA") 'False MsgBox StrEqual("aaaa", "aaaA", vbTextCompare) 'True
Public Function StrEqual( _ ByRef s1 As String, ByRef s2 As String, _ Optional ByVal Compare As VbCompareMethod = vbBinaryCompare _ ) As Boolean If LenB(s1) = LenB(s2) Then If Compare = vbBinaryCompare Then If LenB(s1) Then StrEqual = InStrB(1, s1, s2) Else StrEqual = True End If Else StrEqual = StrComp(s1, s2, Compare) = 0 End If End If End Function
Aus Performance-Gründen wird LenB statt Len benutzt. Analoges gilt auch für InStrB.
Zur Korrektheit des Codes: Wenn zwei Strings die gleiche Länge haben, dann müssen sie exakt gleich sein, wenn der eine String Bestandteil des anderen ist.
© Jost Schwider, 26.10.2000-16.08.2004 - http://vb-tec.de/strequal.htm