Freitag, 21. November 2014

TM-SmartString: InStr

Das Klassenmodul TM-SmartString ermöglicht mit seinen Eigenschaften schon ein komfortables Programmieren. Bei der Erstellung der Klasse TM-SmartSqlString ist mir aufgefallen, dass eine wichtige Methode noch fehlt: Instr. Natürlich ist es jetzt ein Leichtes, diese Methode zu implementieren. Ich möchte jedoch noch etwas mehr Komfort
bieten und einen Parameter ergänzen, der es erlaubt anzugeben, das wievielte Auftreten des Suchstring zurückgegeben werden soll.

Eigenschaft: InStr
Diese Eigenschaft prüft, ob ein Suchstring im String enthalten ist. Im Erfolgsfall wird die Position zurückgegeben. Über einen optionalen Parameter kann angegeben werden, das wievielte Auftreten des Suchstring zurückgegeben werden soll.

Implementierung
Die Implementierung erfolgt mit folgendem Code:
 1:  Public Property Get InStr(Optional ByVal SearchFor As String = "", _  
 2:                            Optional ByVal Start As Long = 1, _  
 3:                            Optional ByVal Count As Long = 1)  
 4:    Dim i As Long  
 5:    Dim StartAt As Long  
 6:    Dim Pos As Long  
 7:      
 8:    StartAt = Start  
 9:      
10:    Do  
11:      Pos = VBA.InStr(StartAt, m_String, SearchFor)  
12:      i = i + 1  
13:      StartAt = Pos + 1  
14:    Loop While Pos > 0 And i < Count  
15:      
16:    InStr = Pos  
17:      
18:  End Property  
Mit dem Parameter Start wird angegeben, ab welcher Stelle die Suche begonnen werden soll. Standardmäßig ist das erste Zeichen voreingestellt. Als zweiter Parameter wird der Suchstring erwartet. Als drittes folgt noch die Anzahl. Über diesen Parameter wird gesteuert, dass wievielte Auftreten des Suchstrings gefunden werden soll. Standradmäßig wird die 1 verwendet.
In Zeile 8 wird der Parameter Start an die Variable StartAt übergeben. In der Schleife in den Zeilen 10 bis 14 erfolgt die eigentliche Suche. Hier wird der VBA-Befehl InStr verwendet. Die Suche erfolgt solange es einen erfolgreichen Suchtreffer gab und die Anzahl der Treffer noch nicht erreicht ist. In Zeile 16 wird das Ergebnis übergeben.

Bisheriger Code
Bisher war folgender Code notwendig, um das zweite Auftreten eines Suchstrings zu finden:
 1:    Dim myString As String  
 2:    Dim i As Long  
 3:    Dim StartAt As Long  
 4:    Dim Pos As Long  
 5:      
 6:    myString = "Hello big world"  
 7:    StartAt = 1  
 8:      
 9:    Do  
10:      Pos = InStr(StartAt, myString, " ")  
11:      i = i + 1  
12:      StartAt = Pos + 1  
13:    Loop While Pos > 0 And i < 2  
14:      
15:    MsgBox Pos  
In den Zeilen 9 bis 13 wird in einer Schleife nach dem zweiten Auftreten gesucht. Der Code ist insgesamt unübersichtlich und schwer verständlich.

Künftiger Code
Bei Verwendung der Klasse TM_SmartString sieht der Code wie folgt aus:
1:    Dim myString As TM_SmartString  
2:    Set myString = New TM_SmartString    
3:    myString = "Hello big World"
4:    MsgBox myString.InStr(" ", , 2)  
In der vierten Zeile erfolgt die Suche. Dazu wird die Eigenschaft InStr aufgerufen. Als Parameter werden der Suchstring und Anzahl des Auftretens übergeben.


Die Implementierung der Eigenschaft InStr zeigt ein weiteres Mal, wie gut eine eigene Klasse geeignet ist, um Komplexität der Implementierung zu verbergen und sauberen, übersichtlichen und leicht verständlichen Code zu schreiben.

Die neue Version 2.37.18 steht (wie immer) auf meiner Webseite zum Download bereit.

1 Kommentar:

Rainer Bauer hat gesagt…

Danke, das ist super!