Les Snippets

Connexion

Split sur plusieurs critères

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 19/09/2006 03:06:19 et initié par PCPT [Liste]
Date de mise à jour : 26/02/2007 02:54:22
Vue : 9929
Catégorie(s) : Compression & Split, Chaîne de caractères
Langages dispo pour ce code :
- VB6, VBA
- VB6
- Voir tous les langages pour ce code snippet



Langage : VB6
Date ajout : 20/01/2007
Posté par rvblog [Liste]
Public Function MultiSuperSplit(ByVal strSource As String, _
                                    bolStockeTroncs As Boolean, _
                                    bolStockeSepars As Boolean, _
                                    varSepars As Variant) As String()
On Error GoTo MultiSuperSplitErr
'   Source de taille quelconque, Séparateurs de tailles quelconques
'   Séparateur unique ou tableau de séparateurs (en nombre quelconque)
'   strSource           -> chaîne à traiter
'   bolStockeTroncs     -> garder ou non les troncs
'   bolStockeSepars     -> garder ou non les séparateurs
'   varSepars           -> séparateur ou tableau de séparateurs
    Dim strLue As String 'la chaine lue
    Dim strRes() As String 'temporaire
    Dim varSep As Variant 'pour l'énumération des séparateurs
    Dim i As Long
    i = 1
    
    'arrêt qd chaine cible est vide
    'ou indice parcours au delà chaine
    While Len(strSource) > 0 And Len(strSource) >= i
        'pour chaque séparateur
        For Each varSep In varSepars
            'lit un tronc de la taille du séparateur
            strLue = Mid$(strSource, i, Len(varSep))
            'si le tronc vaut le séparateur et n'est pas vide
            If (strLue = CStr(varSep)) And (strLue <> vbNullString) Then
                's'il faut stocker le tronc
                If bolStockeTroncs Then
                    'ajoute un élément au tableau
                    ReDim Preserve strRes(UBound(strRes) + 1)
                    'stocke le tronc dans le tableau
                    strRes(UBound(strRes)) = Left$(strSource, i - 1)
                End If
                's'il faut stocker le séparateur
                If bolStockeSepars Then
                    'ajoute un élément au tableau
                    ReDim Preserve strRes(UBound(strRes) + 1)
                    'stocke le séparateur
                    strRes(UBound(strRes)) = strLue
                End If
                'consomme le tronc de la chaine et le séparateur
                strSource = Right$(strSource, Len(strSource) - (i + Len(varSep) - 1))
                'indice parcours au départ
                i = 0
                'quitte l'énumération
                Exit For
            End If
        Next varSep
        'incrémente l'indice de parcours
        i = i + 1
    Wend
    'si la chaine n'est pas consommée entièrement
    If Len(strSource) > 0 Then
        's'il faut stocker le tronc
        If bolStockeTroncs Then
            'ajoute un élément
            ReDim Preserve strRes(UBound(strRes) + 1)
            'stocke le dernier tronc
            strRes(UBound(strRes)) = strSource
        End If
    End If
    'publie le tableau
    MultiSuperSplit = strRes
    
Exit Function
MultiSuperSplitErr:
    'si le tableau n'est pas initialisé
    If Err.Number = 9 Then
        ReDim strRes(0) 'initialise à 1 élément
        Resume Next 'reprend l'exécution à la suite
    'si on reçoit un séparateur au lieu d'un tableau
    ElseIf Err.Number = 13 Then
        varSepars = Array(varSepars) 'transtype en tableau
        Resume 'reprend à l'erreur
    Else
        'c'est mort
        MsgBox Err.Number & _
                vbCrLf & Err.Description & _
                vbCrLf & "MultiSuperSplit()" & _
                vbCrLf & "Prévenez RVBLog, S.V.P.!"
    End If
End Function
'Exemple d'utilisation (pas grand chose n'a changé)
'faites un copier/coller pour tester (parce qu'à lire...)
Private Sub Command1_Click()
    MsgBox Join(MultiSuperSplit("abc%edef%ighi%jjkl", True, True, "%e"), "_")
    MsgBox Join(MultiSuperSplit("abc%edef%ighi%jjkl", True, True, Array("%e", "%i", "%j")), "_")
    MsgBox Join(MultiSuperSplit("abc%edef%ighi%jjkl", True, False, Array("%e", "%i", "%j")), "_")
    MsgBox Join(MultiSuperSplit("abc%edef%ighi%jjkl", False, True, Array("%e", "%i", "%j")), "_")
    
    MsgBox Join(MultiSuperSplit("", True, True, Array("%e", "%i", "%j")), "_")
    MsgBox Join(MultiSuperSplit("abc", True, True, Array("")), "_")
    MsgBox Join(MultiSuperSplit("abc", True, True, vbNullString), "_")
    MsgBox Join(MultiSuperSplit(vbNullString, True, True, "abc"), "_")
    MsgBox Join(MultiSuperSplit(vbNullString, True, True, Null), "_")
    MsgBox Join(MultiSuperSplit("", True, True, Array("")), "_")
    MsgBox Join(MultiSuperSplit("", True, True, ""), "_")
    
    MsgBox Join(MultiSuperSplit("123", True, True, 2), "_")
    MsgBox Join(MultiSuperSplit("123", True, True, "abcdefghijklmnopqrstuvw"), "_")
    MsgBox Join(MultiSuperSplit("abc%edef%ighi%jjkl", True, True, Array("%e", "%i", "%j")), "_")
End Sub

Remarque :
Très largement inspiré du MultiSplit de PCPT (qui m'a longtemps rendu service, jusqu'à dernièrement {le MultiSplit hein}, lorsque j'ai eu besoin d'avoir des séparateurs plus larges).

Snippets en rapport avec : Séparateur, Split, Multiple



Codes sources en rapport avec : Séparateur, Split, Multiple

{C# / C#.NET} SPLIT SQL SANS TABLE TEMPORAIRE
Voici une fonction qui permet de splitter les données contenues dans une seule colonne avec séparate...

{C / C++ / C++.NET} SIMPLE FONCTION TOKENIZE
Cette fonction est l'équivalent des fonctions split et explode de PHP, à savoir qu'elle sépare une c...

{Visual Basic, VB6, VB.NET, VB 2005} OPÉRATIONS SUR LES CHAINES DE CARACTÈRE OPTIMISÉES ET ÉTENDUES
Bonjour à tous, Voici un module regroupant un paquet de fonctions permettant des opérations sur l...

{Javascript / DHTML} KERNEL.JS : HÉRITAGE MULTIPLE ET POLYMORPHISME
comme le titre l'indique cette source permet l'héritage multiple et le polymorphisme. Son utilisati...

{Visual Basic, VB6, VB.NET, VB 2005} UN CDBL QUI GERE LES OPTIONS REGIONAL CONCERANT LE SEPARATEUR DECIMAL
j'ai des machine paramétré avec le '.' en séparateur décimal, d'autre avec une ','. J'ai aussi des ...

{Visual Basic, VB6, VB.NET, VB 2005} PROGRAMME VB6.0 // JEU DE SYLABLE JAPONAISES.
Ce petit programme génère "aléatoirement" un mot en français (à partir d'une liste) et affiche, dans...

{Flash} DETECTEUR AUTOMATIQUE DE MEDIA AS3 - AS2
je viens de la finir ! je m'en sers pour trier mes médias qui viennent d'un xml unique... ça peut se...

{PHP} UTILISATION DU COMPOSANT MULTIPOWUPLOAD
Exemple d'utilisation du composant MultiPowUpload.... Le dossier UploadedFiles doit avoir les dro...

{C / C++ / C++.NET} WIN32CAB .CAB
Compresser decompresser des fichiers en .cab -password encrypter le fichier -Split fichier a la ...

{PHP} TÉLÉCHARGER PLUSIEURS FICHIERS EN 1 CLIC
Voila une petite astuce pour lancer le téléchargement de plusieurs fichiers à la fois. Ça tiens en ...