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 : 7449
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

{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 ...

{PHP} UPLOAD PLUSIEURS FICHIERS EN AJAX + FLASH+PHP
script réalisé par http://digitarald.de/project/fancyupload/ , Il permet l'envoi de fichiers multip...

{Delphi} DELPHI : PROCEDURE SPLIT SIMILAIRE A LA FONCTION EPONYME EN VB
Découpe une chaîne délimitée en ses éléments pour remplir un tableau dynamique passé en paramètre. U...

{Flash} PRELOAD D'IMAGES EXTERNES MUTIPLES
Voici un code pour le préchargement de plusieurs images externes dans le cache du navigateur. C'es...

{Delphi} FONCTION SPLIT
Du fait que les fonctions Split que j'ai trouvé sur le web ne marchait pas correctement, j'ai décidé...

{Visual Basic, VB6, VB.NET, VB 2005} IMPORTER UN FICHIET TXT ET LE METTRE DANS UNE BASE DE DONNÉE
ce code permet de choisir n'importe quel fichier txt dans le pc a condition qu'il soit avec ";" comm...

{Javascript / DHTML} UPLOAD EN AJAX + FLASH (FANCY UPLOAD)
Superbe script réalisé par http://digitarald.de/project/fancyupload/ , Il permet l'envoi de fichier...