Kontakt
DSVGO
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 FunctionDiese 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 FunctionBei 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 FunctionMan beachte, dass keine Schleife mehr benötigt wird.
© Jost Schwider, 20.07.2000-11.12.2000 - http://vb-tec.de/srepeat.htm