Problème de recherche de position dans une chaine.

dede59620 - 19 mars 2023 à 16:15
ravida_1351 Messages postés 57 Date d'inscription jeudi 23 mars 2023 Statut Membre Dernière intervention 2 juillet 2023 - 23 mars 2023 à 11:54

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 :-)
 

5 réponses

NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
19 mars 2023 à 19:31

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


Whismeril Messages postés 19099 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 23 juillet 2024 661
20 mars 2023 à 00:00

Bonsoir 

tu connais les regex?


JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 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...

Whismeril Messages postés 19099 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 23 juillet 2024 661
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.


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

Posez votre question
ravida_1351 Messages postés 57 Date d'inscription jeudi 23 mars 2023 Statut Membre Dernière intervention 2 juillet 2023
23 mars 2023 à 11:54

In VB6, you can use the InStr function with the Like operator to find the position of a wildcard string in another string. Here's an example:

Dim myString As String
myString = "This is a test string 91 91 9A 91 CF"

Dim searchPattern As String
searchPattern = "91 91 9? 91 CF"

Dim startPosition As Integer
startPosition = InStr(1, myString, searchPattern, vbTextCompare)

If startPosition > 0 Then
    ' Match found, startPosition contains the starting position of the match
    Debug.Print "Match found at position " & startPosition
Else
    ' No match found
    Debug.Print "No match found"
End If

In the above example, the InStr function is used to find the starting position of the searchPattern string in myString. The vbTextCompare parameter is used to perform a case-insensitive comparison.

Note that the InStr function returns 0 if no match is found, so we check if startPosition is greater than 0 to determine if a match was found.

I hope this helps!


Rejoignez-nous