Problème d'expressions régulières

cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004 - 10 nov. 2004 à 13:16
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 10 nov. 2004 à 14:23
Bonjour,

Voila ce que je cherche à faire :

J'ai une chaine de la forme :
[argt1]valeur1[argt2]valeur2[argt3]valeur3...

que je souhaite découper en deux tableaux:
tabArg[0] = "argt1" ...... tabVal[0] = "valeur1"
tabArg[1] = "argt2" ...... tabVal[1] = "valeur2"
tabArg[2] = "argt3" ...... tabVal[2] = "valeur3"

Je ne connais pas vraiment les expressions régulières mais je me dis que grâce à elles on doit pouvoir faire quelquechose, non ?

Si quelqu'un veut bien me dépanner.
Merci.

3 réponses

Foucteau Messages postés 29 Date d'inscription mercredi 29 mai 2002 Statut Membre Dernière intervention 22 juin 2013
10 nov. 2004 à 13:40
Désolé je ne connais pas vraiment les expressions réguliere ( si tu es libre sur la forme de ta chaine alors moi ce que je ferais c'est un truc du genre
lachaine="argt1+valeur1-argt2+valeur2-"

tu compte le nombre de + ou de -

tu fait un tableau au nombre de + ou de -

( redim tableau(2) )

et pi une petite boucle du style

X=1
Z=""
for i=1 to len(lachaine)
'on prend le premier caracter
z=right (lachaine,1)
' la chaine ce racourci du premier caracter
lachaine=left(lachaine,len(lachaine)-i)
'si le caracter en question es + ou -
if z="+" or z="-" then
'on incrémente le tablo avec la variable qui a comptabilier toute
' les premieres letre
tableau(x)=ZZ
'on remet ZZ a 0 et on incrément X
ZZ=""
X=X+1
else
'si le caracter n'est pas + ou -
' on ajoute le premier caracter qu'on vien de prendre a la liste des
'caracteres dejas pris
ZZ=ZZ & z
end if
next

sinon va la pour les expressions régulieres : http://www.vbfrance.com/codes/LES_EXPRESSIONS_REGULIERES_FACILES_AVEC_REGULAR_GENERATOR/25839.aspx

conucius diait : "On ne tue pas une mouche avec un canon"
moi je dit " ON EN TUE DIX "
0
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004
10 nov. 2004 à 13:46
Utiliser des tableaux est enviseagable même avec la forme de chaine que j'ai (par contre des caractères comme +, -... peuvent se retrouver dans les valeurs donc ces séparateurs ne vont pas)
mais je pense qu'il est plus propre et plus performant d'utiliser les expresssions régulières.

Merci en tous cas pour ton idée.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
10 nov. 2004 à 14:23
Je testerais cela :
Dim Buffer As String, Tmp() as String,tabArgs() as string, tabVal() as string, i as long, Nb as long,J as Long

Buffer = "[argt1]valeur1[argt2]valeur2[argt3]valeur3..."
Tmp = Split(Buffer,"[")
Nb = Ubound(Tmp)
Redim tabArgs(1 to Nb)
Redim tabVal(1 to Nb)
For i = 1 to Nb
  j = instr(tmp(i),"]")
  tabArgs(i) = Left$(tmp((i),j-1)
  tabVal(i) = Mid$(tmp(i),j+1)
Next
Erase Tmp

Je n'ai pas tester ce bout de code, mais tu devrais avoir ce qu'il te faut dans les tableau tabVal et TabArgs

Christophe R.
0
Rejoignez-nous