Samstag, 24. Mai 2014

Zeichenfolge vervielfachen

Es gibt verschiedene Wege, um eine Zeichen oder eine Zeichenfolge zu vervielfachen. Benötigt wird dies zum Beispiel dann, wenn es darum geht, eine bestehende Zeichenfolge mit einem Zeichen oder einer Zeichenfolge aufzufüllen. Dieser Beitrag zeigt verschiedene Wege auf, um dieses Ziel zu erreichen.

Der erste und einfachste Weg ist die Verwendung des Befehls SPACE. Dieser Befehl erzeugt einen String mit Leerzeichen. Die Anzahl der Leerzeichen wird als Parameter übergeben:
1:  Dim strText As String  
2:  strText = Space(10)  

Wenn an Stelle des Leerzeichens ein anderes Zeichen verwendet werden soll, kann man den Befehl STRING verwenden. Diesem Befehl wird die Anzahl und das gewünschte Zeichen als Parameter übergeben:
1:  Dim strText As String  
2:  strText = String(10, ".")  

Was aber, wenn nicht nur ein Zeichen sondern eine Zeichenfolge wiederholt werden soll? Es liegt nahe, den Befehl STRING zu testen. Diesem kann man ja einen beliebigen String als Parameter übergeben:
1:  Dim strText As String  
2:  strText = String(5, "ab")  
Leider funktioniert diese Code nicht so wie erhofft. Der Befehl String verwendet nur das erste Zeichen der übergebenen Zeichenfolge. Als Ergebnis wird "aaaaa" zurückgeliefert und nicht wie gewünscht "ababababab".

Eine mögliche Lösung wäre, eine Schleife zu verwenden. Der Code dazu sieht wie folgt aus:
1:  Dim i As Integer  
2:  Dim strZiel As String  
3:      
4:  For i = 1 To 5  
5:    strZiel = strZiel & "ab"  
6:  Next i  
Der Code funktioniert. Das Ergebnis sieht aus wie gewünscht. Der Code ist nur etwas lang. Geht es nicht auch kürzer?

In einen Forumsbeitrag fand ich neulich folgende Idee: Man erzeugt mit der String-Funktion einen String mit der gewünschten Länge und einem beliebigen Zeichen. Dieses Zeichen ersetzt man im nächsten Schritt mittels REPLACE durch die gewünschte Zeichenfolge:
1:  Dim strZiel As String  
2:      
3:  strZiel = String(5, "*")  
4:  strZiel = Replace(strZiel, "*", "ab")  

Das ganze geht noch kürzer. Dazu setzt man das Zwischenergebnis aus Zeile 3 direkt in die Replace-Funktion ein:
1:  strZiel = Replace(String(5, "*"), "*", "ab")  

Wer mag, kann sich auch eine eigene Funktion erstellen. Diese kapselt dann den gesamten Code nach außen:
1:  Public Function StringEx(ByVal Number As Long, _  
2:                  Optional ByVal Character As String = " ") As String  
3:      
4:    Dim strTmp As String  
5:      
6:    strTmp = String(Number, "*")  
7:    strTmp = Replace(strTmp, "*", Character)  
8:      
9:    mString = strTmp  
10:      
11:  End Function  

1 Kommentar:

JPA hat gesagt…

Vielen dank für diesen Beitrag.
Obwohl ich bereits seit langer Zeit mit VBA arbeite, war mir nie wirklich bewusst, dass die string-funktion nur das erste Zeichen vervielfältig?!

Es wäre jetzt interessetant herauszufinden, welche Variante schneller verarbeitet wird, die For/Next oder die Replace Variante?
Gruß
JP Allain