VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / Daten / Strings / Repeat Texte wiederholen |
| Historie | |
| 11.12.2000 | Parameter-Reihenfolge getauscht (ist jetzt dieselbe wie bei der String$-Funktion) |
| 08.12.2000 | Nach Anregung von Donald Lessau (VBSpeed): Ohne Schleife ist diese Version doppelt so schnell |
| 20.07.2000 | Erste Version: 1000-mal schneller als der naive Ansatz |
Function StrRepeat( _
ByVal nCount As Long, _
ByRef sText As String _
) As String
For nCount = 1 To nCount
StrRepeat = StrRepeat & sText
Next nCount
End Function
Diese Funktion macht genau das gewünschte: StrRepeat("[-]", 3) ergibt "[-][-][-]". Allerdings läßt die Performance (insbesondere bei vielen Wiederholungen) zu wünschen übrig. Das Problem: Für jede Wiederholung legt VB intern einen neuen String an, der auch noch immer länger wird. Gerade dies kostet in VB viel Zeit.
Function StrRepeat( _
ByVal nCount As Long, _
ByRef sText As String _
) As String
'Platz reservieren:
StrRepeat = Space$(Len(sText) * nCount)
'Text in die richtigen Positionen kopieren:
For nCount = 1 To Len(StrRepeat) Step Len(sText)
Mid$(StrRepeat, nCount) = sText
Next nCount
End Function
Bei meinen Tests (mit 1.000.000 Wiederholungen) ergab sich dadurch eine Beschleunigung auf mehr als das 1000-fache!
Function StrRepeat( _
ByVal nCount As Long, _
ByRef sText As String _
) As String
'Abbruch, falls keine Wiederholungen:
If nCount < 1 Then Exit Function
'Abbruch bei Leerstring:
If Len(sText) < 1 Then Exit Function
If Len(sText) > 1 Then
'Platz reservieren:
StrRepeat = Space$(Len(sText) * nCount)
'Text in erste Position kopieren:
Mid$(StrRepeat, 1) = sText
'Ggf. Rest durch Selbst-Kopie erledigen:
If nCount > 1 Then Mid$(StrRepeat, Len(sText) + 1) = StrRepeat
Else
StrRepeat = String$(nCount, sText)
End If
End Function
Man beachte, dass keine Schleife mehr benötigt wird. © Jost Schwider, 20.07.2000-11.12.2000 - http://vb-tec.de/srepeat.htm