InStr et particularités

Ours!!! Messages postés 6 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 11 décembre 2003 - 11 déc. 2003 à 09:34
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 11 déc. 2003 à 12:06
Salut à tous !

Je me heurte actuellement à un problème lié à l'utilisation de la fonction InStr (en vb .net) :
Le fait est que je recherche un terme bien défini, par exemple "and", dans une chaîne, mais InStr me renvoie également cette expression lorsque ce n'est pas exactement le même terme, par exemple "brand"...

N'y a-t-il pas un paramétrage spécial ou peut-être une fonction + évoluée permettant de trouver le terme exact dans une chaîne tout en retournant la position du premier caractère (à la manière de InStr) ?

PS : je pourrai bidouiller en recherchant "and" avec des espaces -> " and ", mais c'est un peu trop 'bricolage' à mon goût et il peut y avoir des cas dans mon traitement où les espaces de sont pas présents...
On m'a également soufflé d'utiliser IndexOf, mais ça ne change rien dans ce cas, ou encore ceci :

Dim str As String = "brand and"
temp = Mid(str, InStr(str, "and"), Len("and")) 


Là évidemment, la fonction me retourne "and", mais celui contenu dans "brand" et pas le véritable "and"...

Merci pour vos réponses :)

7 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
11 déc. 2003 à 10:17
Et pourquoi n'essaies-tu pas de rechercher la chaine " and" ?

index = Instr("brand and",1," and")+1

Sinon, tu peux rechercher une chaine de caractère dans une autre avec les expressions régulières. Et c'est bcp plus puissant.

Manu
0
Ours!!! Messages postés 6 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 11 décembre 2003
11 déc. 2003 à 10:20
Comme dit pour le " and", il peut y arriver que les espaces ne soient pas présents (mais c'est très rare...)

Et sinon tu peux m'en dire plus concernant les "expressions régulières", je vois pas trop de quoi tu parles :S
0
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
11 déc. 2003 à 10:21
Ben oui il ne va pas te trouver le "and" puisqu'il va "s'arrêter" au premier. Le coup des espaces c'est vrai que c'est un peu bricolage.

Si dans ton traitement, les espaces ne sont pas présents ça donne quoi ?

Peut-être un test du caractère avant et après l'occurence trouvée te permettra de savoir si tu as le bon mot. Mais ça fait encore "bidouille"...
0
Ours!!! Messages postés 6 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 11 décembre 2003
11 déc. 2003 à 10:24
Merde, un clic de traviole désolé pour le post vide
(y'a pas de fonction "Edition" ???)

Oui donc je suis en train de faire un teste du caractère avant et après le terme recherché. Je vois pas comment faire autrement et c'est sûrement ce qu'il y a de plus efficace même si de la bidouille de base :D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
11 déc. 2003 à 12:01
' Référence : Microsoft VB Scripts Regular Expressions 5.5

Dim FORMAT_STRING As RegExp
Dim MATCHES, MATCH As Object

Set FORMAT_STRING= New RegExp
FORMAT_STRING.Pattern = "[a-z]{2}[A-Z]{3}[0-9]*[a-zA-Z]+[a|A]"

'Le format de chaine recherché ici est :
' une chaine contenant, à la suite, 2 lettres minuscules, 3 majuscules, 0 ou plusieurs chiffres , au moins une lettre et pour finir la lettre A. ex : "trGEV89gTEdA"

'Ensuite, tu peux faire des traitements dessus :
Set MATCHES = FORMAT_STRING.Execute(maChaineATraiter)

For Each MATCH In MATCHES
'Dans la boucle, MATCH.Value contient alors la valeur extraite de ta chaine de départ et ayant le bon format
'Tu fais donc les traitements que tu veux ici. Du genre, vérifier si la chaine récupérée est bien un and et pas un brand en vérifiant Len(MATCH.Value)
Next

Manu
0
Ours!!! Messages postés 6 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 11 décembre 2003
11 déc. 2003 à 12:04
Ah ouais, carrément pas mal !!
Merci beaucoup, Manu :big)
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
11 déc. 2003 à 12:06
Si j'ai mis un pattern aussi compliqué, c'est pour que tu apprennes rapidement à écrire des expressions régulières.
Dans ton cas, contente toi de rechercher le pattern suivant :

FORMAT_STRING.Pattern = "[a|A]{1}[n|N]{1}[d|D]{1}"

Ce format compliqué te permet de retrouver les chaines "and", "AnD", "ANd", ...

Note sur l'écriture :
Si tu écrit [a|A|n|N|d|D]{1}, tu ne valideras que les chaines "n", "N", "d", "D", "a" et "A"

Bon amusement.

Manu
0
Rejoignez-nous