Récupérer le xème élément dans une chaîne (fonction)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 716 fois - Téléchargée 44 fois

Contenu du snippet

C'est ce qu'il vous faut si vous avez besoin de récupérer le 9ème élément contenu dans une chaîne de caractère dont chaque élément est séparé par une virgule, un espace ou n'importe quoi d'autre (CR, LF ...).
Le séparateur peut lui-même contenir plusieurs caractères.
Si le numéro est trop grand (que la chaîne ne comporte pas autant d'éléments), le résultat sera une chaîne vide.

Exemples :
Chaine = "VBFrance est vraiment un super site bien pratique"
Résultat = element(Chaine, 5, " ") ' renverra "super"
ou encore
Résultat = element(Chaine, 1, "super") 'renverra "VBFrance est vraiment un "
Résultat = element(Chaine, 2, "super") 'renverra " site bien pratique"
et bien sur
Résultat = element(Chaine, 5, "t") ' renverra "ique"

Source / Exemple :


Public Function Element(ByVal Texte As String, _
                        ByVal Numero As Integer, _
                        ByVal Séparateur As String) As String
    
    '--- Cette fonction renvoie le texte equivalent au Xeme element (Numero de 1 a X)
    '    de la chaine Texte. Chaque element etant séparé par des Séparateurs
    '    Le séparateur peut être lui-même une chaîne de plusieurs caratères
    ' Commentaire, aide : the_jokez@hotmail.com
    
    Dim Debut As Integer, r As Integer, No As Integer
    
    If Right(Texte, Len(Séparateur)) <> Séparateur Then Texte = Texte & Séparateur
    
    Debut = 1
    No = 1
    Element = ""

Element_0:
    r = InStr(Debut, Texte, Séparateur)
    If r = 0 Then GoTo Element_Fin
    If Numero = No Then GoTo Element_10
    No = No + 1
    Debut = r + Len(Séparateur)
    If r >= Len(Texte) Then GoTo Element_Fin
    DoEvents
    GoTo Element_0
    
Element_10:
    Element = Mid(Texte, Debut, r - Debut)
    
Element_Fin:
    
End Function

Conclusion :


Ca marche très bien mais c'est un peu long dès que l'on cherche le 100è élément et plus. Dans ce cas, il vaut meux utiliser la fonction Split (je vous le proposerai un de ces jours)

A voir également

Ajouter un commentaire

Commentaires

alcania
Messages postés
19
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
19 mars 2009
-
10/10 car grace au dernier commentaire de Jack (auteur de la source qui m'était utile :p) j'ai exactement ce que je recherchai :p
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63 -
Salut Draconagi
-1- Si tu ne sais pas comment repérer tes chiffres dans la chaine, comment veux-tu qu'un programme y arrive ? Il n'y a même pas d'espace devant et derrière ?
Essaye la solution donnée ci-après et énumère chaque donnée du Tablo pour reconnaître un chiffre parmi les donneés.
-2- En effet, cette fonction ne retourne que le Xième élément. Donc s'il se déplace, il te faudra chercher partout.

Sinon, pour info, cette fonction avait été faite sous VB5 qui ne disposait pas encore de l'instruction Split de VB6.
Ce Split est beaucoup plus pratique :
Dim Tablo() As String
Tablo = Split(MaChaine, MonSéparateur)
En sortie, tu auras toutes les valeurs dans chacune des données qui composent ce Tablo.
Ca commence à Tablo(0) et fini à Tablo(UBound(Tablo))
Pour le cas -2-, il te suffira de faire une boucle pour repérer ton chiffre.

... et pas la peine de faire un courrier en plus de ce commentaire (perso, ça m'énerve et de toute façon, j'y répondrai)
cs_Draconagi
Messages postés
34
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 octobre 2006
1 -
Ton code est super. Mais dis moi je cherche à peu près la même chose sauf que je cherche à extraire un chiffre dans un string mais il n y a pas de séparateur.
Et en deuxiéme cas, il y a des séparateurs mais la valeur à extraire n'est pas toujours au même endroit. Dans ton prog : No a une valeur fixe.
Si tu pouvais me dire.
Sinon bravo!!!
Gandalf5798
Messages postés
20
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
26 juillet 2010
-
Cettes source est exactement ce que je cherchais...
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63 -
Merci Sahoni, c'est exactement ça.
Si vous faites des tests, ma première définition de recherche est plus rapide s'il faut chercher parmi les premiers éléments de la chaîne.
La deuxième méthode prend pratiquement toujours le même temps, quelque soit le numéro d'élément.
Donc :
-- Si vous ne traitez pas beaucoup de chaîne, choisissez plutôt la deuxième, plus pro
-- 1er méthode si vous avez à rechercher en grand nombre dans des petites chaînes
-- 2ème méthode si vous traitez des grosse chaînes

Merci encore

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.