Décomposer une ligne de commande ou tout autre texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 859 fois - Téléchargée 39 fois

Contenu du snippet

Ce code permet de décomposer un texte quelconque en plusieurs parties en fonction d'un carractère de séparation quelconque voir même d'un ensemble de caractères.

Ce code peut servir a beaucoup de choses. En ce qui me concerne, je l'ai composé pour m'éviter une multiplication de valeurs dans un fichier INI pour enregistrer le contenu d'une listView(Avant, je l'enregistrai avec une valeur différente par colonne, avec ce code, je peu me permettre de faire tenir une ligne de la liste dans une seule valeur, cela ne pose plus de problèmes lors du chargement du fichier dans la liste)

Placez ce code dans un module (C'est plus pratique surtout si vous en avez besoin sur plusieurs controles différents), ensuite, il ne vous reste plus qu'a faire comme indiqué à la suite du code.

Source / Exemple :


Public Type SEPRR
    PosRev(100) As String
    PosAlr(100) As String
    Count As String
End Type
Public Function Séparer(Chaine As String, Séparateur As String) As SEPRR
    Dim IndX, IndX2, Lpos
    Séparer.PosRev(0) = Chaine
    Lpos = 1
    Séparer.Count = 0
    IndX = 0
    For IndX2 = Lpos To Len(Chaine) - Lpos
        If Lpos < Len(Chaine) Then
            If Mid(Chaine, IndX2, Len(Séparateur)) = Séparateur Then
                IndX = IndX + 1
                Séparer.PosAlr(IndX) = Mid(Chaine, Lpos, IndX2 - Lpos)
                Lpos = IndX2 + Len(Séparateur)
                Séparer.Count = Séparer.Count + 1
            End If
        Else
        End If
    Next
    Séparer.PosAlr(IndX + 1) = Right(Chaine, Len(Chaine) - Lpos + 1)
    Séparer.Count = Séparer.Count + 1
    For IndX = 1 To Séparer.Count
        Séparer.PosRev(Séparer.Count - IndX + 1) = Séparer.PosAlr(IndX)
    Next
End Function

Conclusion :


Extraire une valeur contenue dans une chaine en associant les valeurs extraites de 1 à x de la droite vers la gauche :

Retour = Séparer([Chaine],[caractère de séparation]).PosRev([indexe de la valeur extraite])

Extraire une valeur contenue dans une chaine en associant les valeurs extraites de 1 à x de la gauche vers la droite:

Retour = Séparer([Chaine],[caractère de séparation]).PosAlr([indexe de la valeur extraite])

Donner le nombre total de valeurs extractibles

Retour = Séparer([Chaine],[caractère de séparation]).Count

Retour prend la valeur retournée par la fonction

L'indexe 0 donne la chaine complète

Exemple :

Retour = Séparer("C:\Windows\System","\").PosAlr(2)
la valeur de Retour sera "Windows"
Retour = Séparer("C:\Windows\System","\").PosAlr(1)
la valeur de Retour sera "C:"
Retour = Séparer("C:\Windows\System","\").PosRev(1)
la valeur de Retour sera "System"

Si mon explication n'est pas assez claire, si vous trouvez des bugs ou que vous pouvez optimiser ce code, veuillez me le signaler.
merci

A voir également

Ajouter un commentaire

Commentaires

DjaWakaDja
Messages postés
1
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2004
-
Sympa la fonction!
harryjc
Messages postés
11
Date d'inscription
vendredi 21 juin 2002
Statut
Membre
Dernière intervention
14 octobre 2005
-
Je remercie ce petit dev car sous VB5 la fonction split n'existe pas et en tant que particulier, acheter toutes les versions de M$ cela coute cher !!!
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
"C'est bien toutefois de coder soi-même ces fonctions"

-> a quoi bon réinventer la roue ? bof...

Bonne prog' qd mm...
cs_raff
Messages postés
182
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
5 janvier 2004
3 -
Avec Ubound tu peux savoir le nombre d'éléments total, commençant avec 0. C'est bien toutefois de coder soi-même ces fonctions....essaie maintenant de reproduire les fonctions len et mid.....l'avantage avec split, c'est que ça produit un objet de classe collection. Tu peux faire plein de trucs avec un objet collection. Bon, et puis les variables sont un peu grosses dans ton code, c'est trois fois rien à corriger...IndX, IndX2, Lpos prennent chacune 16 octets et puis count devrait être un integer. Désolé si je suis un peu chiant, mais c'est plus fort que moi...

bonne prog !
cs_Berenger
Messages postés
35
Date d'inscription
dimanche 20 janvier 2002
Statut
Membre
Dernière intervention
19 juillet 2004
-
Ok c'est plus facile avec la fonction split.
Cependant, mon code marche tout aussi bien, et je me demande si la fonction split peut fournir le nombre total d'éléments séparables(Propriété "Count" de mon code).
Merci pour l'information

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.