[VB] Fonction InStr et particularités

Fonction InStr et particularités [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 10-12-2003 à 15:42:41    

Bonjour,
 
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...  :sweat:


---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 10-12-2003 à 15:42:41   

Reply

Marsh Posté le 10-12-2003 à 15:47:34    

Y'a un truc que je comprendrais jamais ! Pourquoi les gens, quand ils ont une nouvelle plate forme entre les mains, s'évertuent à utiliser des fonctions obsolètes et mal foutues ?
 
Je veux dire : pourquoi te faire chier à utiliser InStr, qui n'est là que pour compatibilité avec cette merde de VB6 alors que .NET t'offre une classe String bien pratique, avec une méthode équivalente à InStr bien plus propre (String.IndexOf() ) ?
Tu as la chance d'avoir une classe String avec tout un tas de méthodes bien pratiques, alors sers t'en au lieu d'utiliser des trucs deprecated depuis belle lurette et gai luron réunis !


Message édité par Harkonnen le 10-12-2003 à 15:54:04
Reply

Marsh Posté le 10-12-2003 à 15:57:01    

Harkonnen a écrit :

Y'a un truc que je comprendrais jamais ! Pourquoi les gens, quand ils ont une nouvelle plate forme entre les mains, s'évertuent à utiliser des fonctions obsolètes et mal foutues ?
 
Je veux dire : pourquoi te faire chier à utiliser InStr, qui n'est là que pour compatibilité avec cette merde de VB6 alors que .NET t'offre une classe String bien pratique, avec une méthode équivalente à InStr bien plus propre (String.IndexOf() ) ?
Tu as la chance d'avoir une classe String avec tout un tas de méthodes bien pratiques, alors sers t'en au lieu d'utiliser des trucs deprecated depuis belle lurette et gai luron réunis !


 
Merci pour ta p'tite leçon de morale  :whistle: Nan mais t'as complètement raison, mais je crois pas que dans mon cas cela change grand chose parce que IndexOf retourne l'index de la première occurence ; donc pour reprendre mon exemple précédent, s'il examine la chaîne "brand and" et que moi je recherche "and", ben il va me retourner 2 et non 6  :sweat:


---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 10-12-2003 à 17:54:06    

temp= mid(tachaine, instr(tachaine,chainearecherchée),len(chainearecherchée))  doit renvoyer la chaine a recherchée ou 0
 
un peu condensée comme formule soit.


Message édité par le penseur fou le 10-12-2003 à 17:54:32
Reply

Marsh Posté le 11-12-2003 à 09:09:22    

Le Penseur Fou a écrit :

temp= mid(tachaine, instr(tachaine,chainearecherchée),len(chainearecherchée))  doit renvoyer la chaine a recherchée ou 0
 
un peu condensée comme formule soit.


 
Merci pour ta réponse, mais ça ne répond pas à mon problème, je m'explique avec un exemple :

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


 
Alors bien sûr, la fonction retourne "and" dans temp, mais je recherche une fonction qui me trouve EXACTEMENT "and", et qui ne va pas l'extraire d'un autre mot, genre "brand"...
Comme par exemple lorsque l'on fait une recherche dans un document word, on lui demande de trouver le mot exact et pas les mots qui contiennent le mot à chercher  :) (matchWholeWord)
Mais visiblement, une telle fonction n'existe pas pour l'utilisation de chaînes  :(


---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 11-12-2003 à 09:19:00    

comment crois-tu que ta fonction matchWholeWord détermine s'il c'est un mot complet ou pas ?  
 
Avec les espaces bien sûr...
 
Alors ta première idée (" and " ) n'est pas si débile. seul problème, si ce mot en placé en début/fin de chaine, avec de la ponctuation etc...
 
En fait il faut chercher "and" et voir si les caractères qui l'entourent sont acceptable.
 
Je peux pas te dire si cette fonction existe quelque part (regexp ?)


Message édité par jagstang le 11-12-2003 à 09:19:19
Reply

Marsh Posté le 11-12-2003 à 09:21:10    

JagStang a écrit :

comment crois-tu que ta fonction matchWholeWord détermine s'il c'est un mot complet ou pas ?  
 
Avec les espaces bien sûr...
 
Alors ta première idée (" and " ) n'est pas si débile. seul problème, si ce mot en placé en début/fin de chaine, avec de la ponctuation etc...
 
En fait il faut chercher "and" et voir si les caractères qui l'entourent sont acceptable.
 
Je peux pas te dire si cette fonction existe quelque part (regexp ?)


 
Ouaip c'est ce que je pensais faire, le tout est de gérer un max. de caractères qui peuvent se retrouver autour, parce que comme dit, ds mon traitement, des mots peuvent être accolés entre eux et ça c'est pas cool :/ (bien que ce soit rare...)


---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 11-12-2003 à 09:22:04    

ah ben si les mots sont accolées entre eux ils ne forme plus qu'un seul mot...

Reply

Marsh Posté le 11-12-2003 à 09:22:34    

sinon tu dois attaquer avec un dictionnaire [...]

Reply

Marsh Posté le 11-12-2003 à 10:13:21    

[HS]
 
 


 
 
ptain! :sweat:  
 
 
mais on a fait un GN ensemble il me semble!!!! [:dawa]
le GN de loic cet été! \o/
 
c'été vous les trash nains! :lol:
 
 
 
[/HS]


Message édité par Mr yvele le 11-12-2003 à 10:13:41

---------------
yvele n'est plus.
Reply

Marsh Posté le 11-12-2003 à 10:13:21   

Reply

Marsh Posté le 11-12-2003 à 10:19:35    

Corbier a écrit :


 
Merci pour ta réponse, mais ça ne répond pas à mon problème, je m'explique avec un exemple :

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


 
Alors bien sûr, la fonction retourne "and" dans temp, mais je recherche une fonction qui me trouve EXACTEMENT "and", et qui ne va pas l'extraire d'un autre mot, genre "brand"...
Comme par exemple lorsque l'on fait une recherche dans un document word, on lui demande de trouver le mot exact et pas les mots qui contiennent le mot à chercher  :) (matchWholeWord)
Mais visiblement, une telle fonction n'existe pas pour l'utilisation de chaînes  :(  


 
Il te suffit de tester si les caracteres précedents et suivants sont des espaces.
tu fais donc une boucle qui se continue tant que la fonction instr ne renvoie pas  0 ou tant que les caracteres ne sont pas des espaces.

Reply

Marsh Posté le 11-12-2003 à 10:21:43    

Le Penseur Fou a écrit :


Il te suffit de tester si les caracteres précedents et suivants sont des espaces.
tu fais donc une boucle qui se continue tant que la fonction instr ne renvoie pas  0 ou tant que les caracteres ne sont pas des espaces.


Et s'il y a de la ponctuation genre virgule ou point ? [:boidleau]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 11-12-2003 à 10:28:25    

Ben là je fais une fonction qui se démerde pour essayer de savoir si ce qu'il y avant et après, c'est bieng ou pas  :D  
C'est chiant mais ça marchera à peu près !
 
En ts cas, merci pour vos réponses !  :)  
 
Et Mr yvele, j'te MP, je crois qu'on a des choses à se dire  :sol:


Message édité par Corbier le 11-12-2003 à 10:28:43

---------------
Sans ma barbe, quelle barbe !
Reply

Marsh Posté le 11-12-2003 à 10:34:07    

Taiche a écrit :


Et s'il y a de la ponctuation genre virgule ou point ? [:boidleau]

Dans ce cas il fait un test avec les caractéres ascii , il prend en compte tous les caractéres qui ne sont pas des lettres.

Reply

Marsh Posté le 11-12-2003 à 10:38:47    

Comment t'es trop fort [:wam]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 11-12-2003 à 10:46:09    

Taiche a écrit :

Comment t'es trop fort [:wam]

:bounce:  
 
(vrai? :??: )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed