>" />

String2 du InStr du style <<like("??:??:??") >>

cs_azerty25
Messages postés
1114
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007
- 26 févr. 2005 à 22:01
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- 26 févr. 2005 à 23:29
Hello all

J'ai par un exemple une string, comme "12:12:12", qui est une heure, contenue dans une autre string plus grande et avec des infos que je ne souhaite pas garder, comme par exemple "xxxxxxx 12:12:12 xxxxx", et je voudrai donc utiliser InStr pour localiser ou commence ma chaine avec l'heure, pour pouvoir la sélectionner avec un mid$(). Mais comme dans le paramètre de recherche de InStr, il faut spécifier ce que l'on veut trouver, comment faire dans mon cas ou les nombres peuvent changer mais pas les ":" ?
Je voudrais donc savoir s'il est possible de faire une instruction du genre InStr(1,"xxxxxxx 12:12:12 xxxxx", like("??:??:??")), ou les points d'interrogations sont des caracteres génériques qui peuvent prendre n'importe quelle valeur.
Bon je sais, c'est un peu compliqué ce que j'ai expliqué, j'ai pas réussi a expliquer mieux, mais en lisant bien, j'pense qu'il y a moyen de comprendre ;-)

@Z3RtY25 ==

6 réponses

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
26 févr. 2005 à 22:21
Ben si tes : ne changent pas, ne suffit-il pas de localiser le premier
: avec instr et tu sais que ta chaine commance à n-2 caractères du style



n = InStr(1,
"xxxxxxx 12:12:12 xxxxx" , ":")
TaChain = mid$("xxxxxxx 12:12:12 xxxxx" , n-2 , 8)


C'est bien ce que tu veux ou j'ai pas tout compris ?



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
tryborg
Messages postés
29
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
1 mars 2005

26 févr. 2005 à 22:24
Es-ce que les xxxxx peuvent contenir un 'espace' ? sinon tu fait un teste sur chaque octects et lorsque que tu rencontre un espace alors tu récupère la suite jusqu'au prochain 'espace'.

Si j'ai bien compris l'énnoncé ben sur , tu veux récupérer dans ta chaine seulement l'heure ?
Informe moi sur les valeurs que peuvent prendre les xxxxx et je te donnerai un code...


tryborg
0
cs_azerty25
Messages postés
1114
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

26 févr. 2005 à 22:46
Merci pour vos réponses.
Je vais prendre la solution de casy, je cherchai compliqué mais en fait, y'a plus simple, comme il l'a montré. Mais ça ne pourrait pas fonctionner dans tout les cas, imagine que dans les xxxx ils y ai un ":" ... Sa fausserai tout le résultat. Dans mon cas, c'est impossible donc ça va.
Mais s'il éxiste vraiment une solution de pouvoir localiser l'heure directement, faites le savoir lol, ça peut toujours servir...
Au début, j'était partit sur une boucle, qui prenait dans la chaine de base un groupe de 8caractères en partant du premier avec left, et en décalant à chaque fois par incrémentation de 1, et un test ensuite avec un like pour savoir si le groupe était bien l'heure, si like() valait true, alors ça sélectionnait avec mid le groupe, et j'avais l'heure. Le soucis, c'est que c'est plus gourmand que de pouvoir directement trouver le groupe... D'ou la question ;-)

Enfin bon, merci à vous et bon coding ;-)

@Z3RtY25 ==
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
26 févr. 2005 à 23:00
Oui effectivement, si tu as ":" dans la 1ere partie de la chaine, ça pose problème.



Le problème de LIKE c'est qu'il peut te dire si ce que tu recherche est présent dans la chaine mais ne te donne pas la position.

Qaunt à InStr, elle n'accepte pas de comparer avec une chaine contenant des caractères génériques.



Par contre, une solution serait de faire un mix :

tu prends la solution que j'ai donné,

tu extrais la chaine de 8 caractères et tu la compare avec un LIKE pour
voir si c'est ce que tu veux que tu as trouvé, si c'est pas bon tu
refais une recherche à partir de la nouvelle position.

C'est plus court que de passer tous les caractères.



Là ça marche sauf (si le diable est avec nous) si par malchance
tu arrive a trouver une chaine ayant la même structure mais n'étant pas
l'heure que tu recherche.




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0

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

Posez votre question
cs_azerty25
Messages postés
1114
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

26 févr. 2005 à 23:11
Mais le soucis, avec cette solution, c'est que si tu prend les 8 premiers caracteres, et que l'heure commence au caractere 4, ba, tu l'as dans le baba car il ne la vera pas, pourtant, il passera 2 fois dessus, les 4 premiers, et comme il trouve pas la chaine entiere, le 2eme passage, il vera que les 4 derniers, sans pour autant la trouver en entiere, d'ou l'utilisation d'une boucle ;-)

@Z3RtY25 ==
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
26 févr. 2005 à 23:29
ce que je voulais dire :



n=1

Do



n = InStr( n , "xxxxxxx 12:12:12 xxxxx" , ":")

if n=0 then exit do

TaChain = mid$("xxxxxxx 12:12:12 xxxxx" , n-2 , 8)

if TaChain Like "??:??:??" then exit do

loop




En gros tu applique ma première solution sur chacune des occurences de ":"



Au lieu de faire ta boucle sur chaque caractères tu fais la boucle sur
chaque ":" et tu laisse InStr digérer les autres caractères à ta place.




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0