Problème de recherche de position dans une chaine.

dede59620 - 19 mars 2023 à 16:15
Whismeril Messages postés 18281 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 mars 2023 - 20 mars 2023 à 11:28

Bonjour,

En VB6, INSTR et LIKE permettent ensemble de trouver une position de chaine dans une autre mais c'est lourd d'associer les deux.
N'y a-t-il pas une procédure simple pour trouver la position d'une chaine avec joker dans une autre chaine ?

Plus précisément, mon problème est de simplifier la recherche de la position d'un truc comme "91 91 9? 91 CF" dans une chaine longue, le ? étant le joker du code variable.

Avec Like, je peut savoir que la chaine existe bien parce que ? vaut n'importe quelle valeur entre 0 et F, ça marche mais je n'ai pas la position en retour par contre, ce qui m'oblige à refaire un autre test pour obtenir cette dernière ...

Ensuite, avec INSTR je dois calculer l'écart entre les 3 morceaux de chaine, vérifier la concordance, bref c'est chiant et lourd.
C'est vrai qu'entre 90 et 9F ça ne fait que 16 tests, mais bon si je tombe sur ?? je suis pas dans la m...

----------------------------- exemple---
Line Input #libre4, tout$                               ' lire tout le fichier texte, vérification de la pertinence du fichier concerné
rechercher$ = "91 91 9? 91 CF"

  toto = tout$ Like "*" & rechercher$ & "*"
    If toto = True Then
        CodeSpecial.Text = "Trouvé " & rechercher$ & " dans " & Len(tout$)
    Else
        ...
     End if
-------------------------

Si vous avez une piste cela m'aiderai bien, merci d'avance :-)
 

4 réponses

NHenry Messages postés 15048 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 mars 2023 156
19 mars 2023 à 19:31

Autre solution, faire un Split sur le caractère puis un Join avec la valeur de remplacement ?


J'interviens principalement en VB6, VB.NET et C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict".

0
Whismeril Messages postés 18281 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 mars 2023 621
20 mars 2023 à 00:00

Bonsoir 

tu connais les regex?


Quand j'étais petit, la mer Morte n'était que malade.
George Burns

0
JeuDuTaquin Messages postés 248 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 20 mars 2023 7
Modifié le 20 mars 2023 à 10:20

Salut,

Ce serai plus simple de mettre tes valeurs hexa dans un tableau avec un Split.
Tu gagnera en rapidité et traitement, en testant le n+0 ("91") et le n+4 ("CF")

Puis tu reforme ton fichier texte, mais là, on perd du temps...

En mode texte, tu dois couper ton texte avec un Right$() pour gagner du temps, en sauvegardent l'offset incrémental pour réduire la taille de la chaîne. Dans une variable de travail temporaire, bien sûr.

Après, il faut reconstruire la chaîne comme le précise NHenry.

Mais Whismeril fervent défenseur des Regex, te propose la solution la plus simple...

0
Whismeril Messages postés 18281 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 mars 2023 621
20 mars 2023 à 11:28

Non, le plus simple serait déjà de laisser tomber vb6 (je le rappelle, ce langage est obsolète depuis 20 ans...).

Les outils "de base" de VB.Net sont plus simples d'emplois. Et là aussi, on peut trouver des regex, mais pas que.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns

0
Rejoignez-nous