Extrare chaine

kelm_by Messages postés 296 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 21 novembre 2008 - 16 déc. 2007 à 23:27
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 17 déc. 2007 à 07:00
salut tous le monde
j'ai une chaine st ou je veux extraire tous les mots entre a et b sauf que ce code ne donne que les 2premier

st="xwfgafdbdrtaetrbtrydytrzatuytrb"
Do While w < 5
if InStr(st, "a")>0 then
p1 = InStr(st, "a")
ch1 = mid(st, p1)
p2 = InStr(ch1, "b")
ch2 = Left(ch1, p2)
end if
p3=InStr(st, b)
If p3 > 0 Then st = Right(st, p3)
w = w + 1
Loop

merci d'avance

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 déc. 2007 à 01:45
Salut
"... que les deux premiers" : les deux premiers quoi ?
p3=InStr(st, b)  est, je pense, incorrect --> p3=InStr(st, "b")
A chaque tour de ton Do-Loop, le résultat final est stocké dans ch2 : un nouveau ch2 est donc écrasé par un nouveau ch2 : Normal ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 déc. 2007 à 07:00
Bonjour,

La trop grande simplicité de cet exercice me conduit à me limiter à quelques premières indications :

Si P2 est la position de "b" et P1 cette de "a", in mot entre a et b n'est susceptible d'exister que si, à la fois,
P2 est plus grand que P1 et P1 est plus grand que 0.
On a alors le mot compris entre "a" et "b" de la façpn suivante :
Mid(st, P1 + 1, P2 - P1 - 1)
et la partie de la chaîne non encore traitée commence à P2 + 1
0
Rejoignez-nous