split amélioré pour traiter un texte formaté du style ,001,"bonjour tout le monde, ça va,"?",,"etc...",,
(en gros ça tient compte de la présence ou non de guillemets avant la chaine contenant le séparateur afin de déterminer quel role attribuer au séparateur: bien pratique pour certains fichiers csv)
cette fonction s'utilise comme le split traditionnel:
une chaine en entrée + un séparateur au choix
elle retourne un tableau comme split
NB1:le séparateur supplémentaire " n'est pas paramétrable; il est considéré par défaut
NB2: Pour rendre l'appli utile, je viens de rajouter des export HTM ou RTF ainsi que la possibilité de copier le contenu de la listview
Source / Exemple :
'####la fonction megasplit###
Private Function Megasplit(chaine As String, separateur As String) As Variant
'testé avec les cas suivants
',,3,4,,6,,,9,"10",
'1,"2,2",,"4","5",6,7,8,9,10,11
',,,,,,,,9,10,"11"
'1,2,3,4,5,6,7,8,9,10,11
Dim resultatcoll As New Collection
Dim compte As Double
ReDim resultat(1)
Dim ouinon As Boolean
Dim t As Variant
Dim t2 As Variant
Dim x As Variant
Dim x2 As Variant
Dim chaine2 As String
Dim chaine3 As String
Dim carspe1 As String
Dim carspe2 As String
'je recherche deux caractères non utilisés dans la chaine
'si la condition n'est pas remplie,
'c'est que ce n'est pas un fichier texte ;-)
Dim m As Integer
Dim mm As Integer
For m = 254 To 1 Step -1
If InStr(1, chaine, Chr(m)) = 0 Then
carspe1 = Chr(m)
For mm = m - 1 To 1 Step -1
If InStr(1, chaine, Chr(mm)) = 0 Then
carspe2 = Chr(mm)
Exit For
End If
Next
Exit For
End If
Next
If m = 1 And mm = 1 Then
Exit Function
End If
'debarassons nous des cas particuliers
If Left(chaine, 1) = separateur Then
chaine = carspe1 + chaine
End If
If Right(chaine, 1) = separateur Then
chaine = chaine + carspe1
End If
'l algorithme qui distingue les chaines avec
'ou sans des "
ouinon = True
t = Split(chaine, Chr(34), , vbTextCompare)
For Each x In t
If ouinon = True Then
chaine2 = x
chaine2 = Replace(chaine2, separateur + separateur, separateur + carspe1 + separateur)
If Left(chaine2, 1) = separateur Then
chaine2 = Right(chaine2, Len(chaine2) - 1)
End If
If Right(chaine2, 1) = separateur Then
chaine2 = Left(chaine2, Len(chaine2) - 1)
End If
t2 = Split(chaine2, separateur, , vbTextCompare)
For Each x2 In t2
chaine3 = x2
chaine3 = Replace(chaine3, " ", carspe2)
chaine3 = Trim(Replace(chaine3, carspe1, " "))
chaine3 = Replace(chaine3, carspe2, " ")
compte = compte + 1
ReDim Preserve resultat(compte)
resultat(compte) = chaine3
Next
Else
compte = compte + 1
ReDim Preserve resultat(compte)
resultat(compte) = x
End If
ouinon = ouinon - (ouinon = True) + (ouinon = False)
Next
'fini
Megasplit = resultat
End Function
'####fin de la fonction megasplit###
Conclusion :
- A gauche, tapez le texte (ou ouvrez le fichier texte) que vous souhaitez formater,
puis cliquez "Lancer MegaSplit" pour visualiser le résultat dans la grille de droite.
-vous pouvez copier le contenu de la listview ou enregistrer au format RTF ou HTM
-Nécessite le composant MSCOMCTLOCX sur votre poste
- une api qui n'est pas de moi pour ouvrir les fichiers et qui n'a rien à voir avec le sujet de ce source.
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.