Recherche complexe dans une chaine

Résolu
Signaler
Messages postés
37
Date d'inscription
lundi 15 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2015
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
37
Date d'inscription
lundi 15 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2015

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Très sympatiques ces remerciements, j'apprécie