Fonction " wraptext - retour ligne " pour une chaîne de caractères

Contenu du snippet

Cela fait quelques temps que je cherchais un bout de code qui me permettrait de découper une chaîne de caractères selon une taille définie et tout en gardant les mots ensembles.
J'évais en effet besoin de cette fonctionalité présente dans tous les softs connus afin de "découper" une chaîne de caractère pour une impression.
Vu que je n'ai rien trouvé, j'ai développé cette fonction.

nb:
- il est bien entendu qu'il est toujours possible d'améliorer le code. Le but de cette fonction est de donner un coup de pouce, une avance sur le développement.
- la fonction doit être intégrée dans le code pour être utile.
- les commentaires sont bilingues (je travaille dans un envirronement multilingue et nos commentaires se font toujours en Anglais pour que nos collègues néerlandophones puissent les comprendre)
- j'utilise toujours les error trap classiques par facilité...
- on peut aussi travailler avec la classe stringbuilder pour générer la chaîne

Source / Exemple :


Sub wraptext(ByRef strText As String(), ByVal ilen As Integer)
        ' cette fonction va découper le texte dans le vecteur
Declaration:
        Dim strTest As String()
        Dim strWork As String()
        Dim strResult As String(), strMove As String()
        Dim icount As Integer, i As Integer, j As Integer
Debut:
        On Error GoTo Erreur
        
        ReDim strTest(strText.Length) 
        ' ajuste la taille du vecteur de travail à celui reçu
        strWork = Split(strText(0), " ")
        ' découpe la chaîne de caractère en autant de mots
        icount = strWork.GetLength(0)
        ' récupère le nombre de mots de la chaîne
        i = 0
        j = 0
        ReDim strResult(0)
        ' attention avant de travailler avec un vecteur défini comme (), il faut le dimentionner
        While i < icount
            If Len(strWork(i)) + Len(strResult(j)) + 1 <= ilen Then ' calcule si la chaîne construite est plus grande que la limite
                If Trim(strResult(j)) <> "" Then 
                    strResult(j) = strResult(j) & " " & strWork(i)
                Else ' première fois que la chaîne est construite
                    strResult(j) = strWork(i)
                End If
            Else
                j += 1
' afin de pouvoir augmenter la taille du vecteur, il faut passer les valeur de celuic-i dans un vecteur de travail, car il est tout bonnement remis à zéro lors du redimentionnement
                ReDim strMove(j)
                strResult.CopyTo(strMove, 0)
                ReDim strResult(j)
                strMove.CopyTo(strResult, 0)
                i += -1
' pas d'incrémentation car le mot suivant doit être repris dans la ligne suivante du vecteur, donc on désincrémente
            End If
            i += 1
        End While
        ReDim strText(strResult.Length)
        strResult.CopyTo(strText, 0)

' n'oubliez pas de vider vos variables
        strTest = Nothing
        strWork = Nothing
        strResult = Nothing
        strMove = Nothing
Fin:
        Exit Sub
Erreur:
        MsgBox("Error : " & Err.Description & vbNewLine & "Nr : " & Err.Number)
        Resume Fin
    End Sub

Conclusion :


La fonction demande un string array (vecteur). On lui donne en entrée une chaine avec une entrée, la ligne que l'on veut découper, avec la taille souhaitée. Et la variable est redimensionnée en autant de lignes découpées.
Il est possible que certaines lignes vides soient générées, il suffira de les supprimer / passer lors du traitement de la chaîne résultante.

J'utilise la fonction split de la classe string de vb. Cette fonction très pratique permet de découper une chaîne de caractère dans un vecteur selon un séparateur défini. Dans ce cas-ci le séparateur est l'espace.

on donne donc un vecteur chaine comme celui-ci:

mavariable = ("blablablablablablabtralalalalala")

et on reçoit :

mavariable = ("blabla","blabla","blabla",...)

il suffit ensuite de parcourir le vecteur pour en récupérer les lignes.

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.