Stéphane,

Le 29/10/2019 à 22:52, Stéphane Santon a écrit :

Existe-t-il une fonction Basic de traitement de chaine de caractère qui rend une chaine de caractères conforme aux /noms d'objets/ comme dans TextTable.Name : supprime les espaces, caractères accentués, ... ?


non, rien de tout prêt dans la bibliothèque d'exécution.

Voici une fonction TitleCase qui va te permettre de démarrer :

8< --------------------------------------------------------

Function TitleCase(ByRef pStr As String) As String
'Converts a string into titlecase.
'eg: "test the o'connors and the mac-addamses" -> "Test The O'Connors And The Mac-Addamses"
'Input:
'-- pStr: the string to process
'Output: the processed string

        Dim l_Str As String                     'output buffer
        Dim l_StrUC As String           'temporary version with uppercase chars
        Dim l_SplitChars As String      'chars where to split the titles
        Dim l_arrItems As Variant       'array of title items
        Dim l_StrTmp As String          'temporary buffer
        Dim l_CurSplit As String        'a splitting character
        Dim j As Long
        Dim i As Long

        If (pStr = "") Then
                l_Str = pStr
        Else
                'set the splitting chars set
                l_SplitChars = " '’-" & Chr(160) 'Chr(160) = unbreakable space
                
                'process the input string for each splitting character
                l_Str = LCase(pStr)
                l_Str = UCase(Left(l_Str, 1)) & Right(l_Str, Len(l_Str) - 1)
                For i = 1 to Len(l_SplitChars)
                        l_CurSplit = Mid(l_SplitChars, i, 1)
                        l_arrItems = Split(l_Str, l_CurSplit)
                        If (UBound(l_arrItems) > 0) Then
                                l_StrTmp = ""
                                l_Str = ""
                                For j = 0 to UBound(l_arrItems)
                                        'set 1st char uppercase
l_StrUC = UCase(Left(l_arrItems(j), 1)) & Right(l_arrItems(j), Len(l_arrItems(j)) - 1)
                                        'add the split char if it is the first 
char
                                        If (j > 0) Then
                                                l_StrTmp = l_StrTmp & l_CurSplit 
& l_StrUC
                                        Else
                                                l_StrTmp = l_StrTmp & l_StrUC
                                        End If
                                Next
                                'update the string to process
                                l_Str = l_Str & l_StrTmp
                        End If
                Next
        End If
        
        TitleCase = l_Str
End Function 'TitleCase

Sub _TitleCase_Test()

        Print TitleCase("test the o'connors and the mac-addamses")

End Sub '_TitleCase_Test

----------------------------------------------------- >8


Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
--
Jean-Francois Nifenecker, Bordeaux


--
Envoyez un mail à [email protected] pour vous désinscrire
Les archives de la liste sont disponibles à 
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Répondre à