Donnerstag, 29. Mai 2014

TM-SmartString: PadLeft, PadRight

In diesem Beitrag wird das Klassenmodul TM-SmartString um zwei Eigenschaften erweitert, die es erlauben, den String mit einem Zeichen oder einer Zeichenfolge aufzufüllen: PadLeft und PadRight.

Eigenschaft: PadLeft
Diese Eigenschaft bringt den String auf die angegebene Länge. Fehlende Zeichen werden links ergänzt. Dazu wird das angegebenen Zeichen oder die angegebene Zeichenkette verwendet.

Implementierung
Die Implementierung erfolgt mit folgendem Code:
1:  Public Property Get PadLeft(ByVal TotalWidth As Integer, _  
2:                     Optional ByVal FillInChar As String = " ") As String  
3:    Dim strTmp As String  
4:    strTmp = VBA.Replace(VBA.String(TotalWidth, "*"), "*", FillInChar)  
5:    If (Me.Length < TotalWidth) Then  
6:      PadLeft = VBA.Right$(strTmp & m_String, TotalWidth)  
7:    Else  
8:      PadLeft = m_String  
9:    End If  
10:  End Property  
In der vierten Zeile wird die wird die zu ergänzende Zeichenfolge vervielfacht. Wie dieser Code funktioniert, habe ich in einem weiteren Artikel beschrieben. In Zeile 6 wird die Ergänzungszeichenfolge vor den bisherigen Text hinzugefügt. Am Ende wird der String mit der Funktion Right$ auf die gewünschte Länge gebracht. Der Name der Funktion Right$ wird zusätzlich mit dem Namen der zu verwendenden Bibliothek qualifiziert; in diesem Fall "VBA". So wird sichergestellt, dass die Funktion Right$ aus der Bibliothek VBA verwendet wird.

Bisheriger Code
Bisher war folgender Code notwendig, um einen String links mit einer Zeichenfolge aufzufüllen:
1:  Dim strTmp As String  
2:  Dim TotalWidth As Long  
3:  Dim FillInChar As String  
4:  Dim myString As String  
5:      
6:  myString = "Hello world"  
7:  TotalWidth = 15  
8:  FillInChar = "->"  
9:      
10:  strTmp = Replace(String(TotalWidth, "*"), "*", FillInChar)  
11:  If (Len(myString) < TotalWidth) Then  
12:    strTmp = Right$(strTmp & myString, TotalWidth)  
13:  Else  
14:    strTmp = m_String  
15:  End If  
16:    
17:  MsgBox strTmp  
In den Zeilen 10 bis 15 findet sich die Logik für die Ergänzung des Textes. In den vorhergehenden Zeilen werden die notwendigen Variablen deklariert und mit Werten gefüllt.

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 world"  
4:  MsgBox myString.PadLeft(15, "->")  
In der vierten Zeile wird die Eigenschaft PadLeft abgerufen. Als Parameter werden die Länge und die Füllzeichenfolge übergeben.

Eigenschaft: PadRight
Diese Eigenschaft bringt den String auf die angegebene Länge. Fehlende Zeichen werden rechts ergänzt. Dazu wird das angegebenen Zeichen oder die angegebene Zeichenkette verwendet.

Implementierung
Die Implementierung erfolgt mit folgendem Code:
1:  Public Property Get PadRight(ByVal TotalWidth As Integer, _  
2:                      Optional ByVal FillInChar As String = " ") As String  
3:    Dim strTmp As String  
4:    strTmp = VBA.Replace(VBA.String(TotalWidth, "*"), "*", FillInChar)  
5:    If (Me.Length < TotalWidth) Then  
6:      PadRight = VBA.Left$(m_String & strTmp, TotalWidth)  
7:    Else  
8:      PadRight = m_String  
9:    End If  
10:  End Property  
In der vierten Zeile wird die wird die zu ergänzende Zeichenfolge vervielfacht. Wie dieser Code funktioniert, habe ich in einem weiteren Artikel beschrieben. In Zeile 6 wird die Ergänzungszeichenfolge an den bisherigen Text angehängt. Am Ende wird der String mit der Funktion Left$ auf die gewünschte Länge gebracht. Der Name der Funktion Left$ wird zusätzlich mit dem Namen der zu verwendenden Bibliothek qualifiziert; in diesem Fall "VBA". So wird sichergestellt, dass die Funktion Left$ aus der Bibliothek VBA verwendet wird.

Bisheriger Code
Bisher war folgender Code notwendig, um einen String rechts mit einer Zeichenfolge aufzufüllen:
1:  Dim strTmp As String  
2:  Dim TotalWidth As Long  
3:  Dim FillInChar As String  
4:  Dim myString As String  
5:      
6:  myString = "Hello world"  
7:  TotalWidth = 15  
8:  FillInChar = "<-"  
9:      
10:  strTmp = Replace(String(TotalWidth, "*"), "*", FillInChar)  
11:  If (Len(myString) < TotalWidth) Then  
12:    strTmp = Left$(myString & strTmp, TotalWidth)  
13:  Else  
14:    strTmp = m_String  
15:  End If  
16:    
17:  MsgBox strTmp  
In den Zeilen 10 bis 15 findet sich die Logik für die Ergänzung des Textes. In den vorhergehenden Zeilen werden die notwendigen Variablen deklariert und mit Werten gefüllt.

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 world"  
4:  MsgBox myString.PadRight(15, "<-")  
In der vierten Zeile wird die Eigenschaft PadRight abgerufen. Als Parameter werden die Länge und die Füllzeichenfolge übergeben.


Die nächsten Schritte sind gemacht. Mit der Implementierung der Eigenschaften PadLeft und PadRight kann er enthaltene Text in rechts bzw. links mit einer Füllzeichenfolge ergänzt werden. Wieder wird die notwendige Funktionalität in der Klasse gekapselt. Bei Verwendung der Eigenschaften entsteht sauberer, übersichtlicher Code.

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

Keine Kommentare: