Concaténation rapide de chaines (sans api)

Description

Sans API, et oui, ca m'arrive parfois de ne pas en utiliser :p

ici, une simple classe permettant de concaténer des chaines de caractères rapidement (très rapidement, en comparaison avec un simple & )

ne pas utiliser pour chaque concaténation que vous ferez, bien évidemment, mais pour a partit d'un nombre raisonnable de concaténation, le gain est sensible : la mémoire allouée n'a pas besoin d'être contigüe en mémoire, moins de données sont déplacées, etc

Source / Exemple :


Option Explicit

Private mxsValues() As String
Private mnCount As Long
Private mnCapacity As Long
Private mnLength As Long

'# Nombre de cases que l'on ajoute au tableau lorsqu'il est trop petit
Private Const BLOCKSIZE As Long = 250

'# Méthode qui permet l'ajout d'éléments dans le tampon
Public Sub Append(ByVal szString As String)
Dim nLength As Long
    nLength = Len(szString)
    If nLength Then
        If mnCount = mnCapacity Then
            '# Le tableau est trop petit...
            '# On agrandit sa taille de BLOCKSIZE
            ResizeArray
        End If
        
        mnLength = mnLength + nLength
        
        '# On ajoute notre chaine dans le tableau
        mxsValues(mnCount) = szString
        '# Et on incrémente le compteur
        mnCount = mnCount + 1
    End If
End Sub

'# Propriété par défault
'# on recolle simplement les morceaux...
Public Property Get Value() As String
Attribute Value.VB_UserMemId = 0
Attribute Value.VB_MemberFlags = "200"
    Value = Join(mxsValues, vbNullString)
End Property

'# On vide le buffer
Public Sub Clear()
    mnCount = 0
    mnLength = 0
    mnCapacity = 0
    Erase mxsValues
End Sub

Private Sub ResizeArray()
    ReDim Preserve mxsValues(mnCapacity + BLOCKSIZE - 1) As String
    mnCapacity = mnCapacity + BLOCKSIZE
End Sub

Public Property Get Length() As Long
    Length = mnLength
End Property

Private Sub Class_Terminate()
    Me.Clear
End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.