Recherche complexe dans une chaine

Résolu
cs_Pirotes31 Messages postés 37 Date d'inscription lundi 15 novembre 2004 Statut Membre Dernière intervention 3 juillet 2015 - 13 févr. 2009 à 11:57
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 13 févr. 2009 à 16:32
Bonjour,
voici mon problème :
je dois chercher dans une chaine de caractère si un numéro est présent, quand dans cette chaine il y a un intervalle de numéro. Plus concrètement voici le type de chaine que je peux avoir :
" le numéros vont de (1000>9000)"
Mais j'ai aussi certaines chaines qui peuvent être sous la forme :
" si numéro > 100 alors"
Je pensais biensûr utiliser la fonction InStr, et me baser sur le caractère ">", mais je n'arrive pas à bien organiser mon raisonnement...
dès que j'ai pu déterminer l'intervalle, je ferais évidemment une boucle pour tester si mon numéro donné au départ est bien dans l'intervalle.
Pouvez-vous m'aider? Avez-vous des pistes?
D'avance merci pour vos réponses.
Cordialement,
Pirotes31.

3 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 févr. 2009 à 13:48
Salut
Comme tu l'as pensé, il faut isoler le terme important dans ce texte.
Il est donc primordial que le texte se présente toujours sous la même forme :
   (1000>9000)
ne sera pas la même chose que 
   (1000 > 9000)

--> En plus de Instr, il y a un outil très pratique pour faire du découpage : Split
Il converti une chaine de caractères en un tableau de chaine en se basant sur un caractère, exemple :
   Dim mTableau() As String
   mTableau = Split(" le numéros vont de (1000>9000)", " ")
renverra un tableau de chaine (colonne de gauche = index du tableau) :
   0 : "" car il y a un espace en tête de chaine
   1 : "le"
   2 : "numéros"
   3 : "vont"
   4 : "de"
   5 : "(1000>9000)"
Le nombre maxi de chaines dans le tableau est donné par UBound(mTableau)
Cela peut-être un bon début pour isoler les chiffres, sachant qu'un second Split :
   Dim mXXX() As String
   mXXX = Split(mTableau(5), ">")
te donnera
   0 : "(1000"
   1 : "9000)"

etc ...

Si tu fais un Split de ton texte initial avec le ">" comme séparateur :
1ère chaine :
   Dim mTableau() As String
   mTableau = Split(" le numéros vont de (1000>9000)", ">")
donnera
   0 : " le numéros vont de (1000"
   1 : "9000)"

Pour la 2ème chaine :
   Dim mTableau() As String
   mTableau = Split(" si numéro > 100 alors", ">")
donnera
   0 : " si numéro "
   1 : " 100 alors"

Voir aussi Trim (LTrim / RTrim)

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)
3
cs_Pirotes31 Messages postés 37 Date d'inscription lundi 15 novembre 2004 Statut Membre Dernière intervention 3 juillet 2015
13 févr. 2009 à 15:09
Re bonjour,

un grand merci pour ta réponse qui va m'être très utile dans mon travail, et grâce à ton aide, je vais peut-être retarder ma date de licenciement... (je n'exagère pas tant que cela malheureusement).
Heureusement qu'il y a des gens comme toi pour partager le savoir.
Encore un grand merci du fond du coeur. :-)
Pirotes31.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 févr. 2009 à 16:32
Très sympatiques ces remerciements, j'apprécie
0