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 40
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 40
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 40
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
Rejoignez-nous