Faire une recherche dans un Byte()

Résolu
Signaler
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010
-
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010
-
Bonjour,
J'ai une varriable de type Byte(). Je voudrais faire une recherche d'un mots qui serait présent au format Unicode mais sans faire une conversion de mon Byte() en string afin d'en extraire ça position pour au final isoler une partie du tableau dans un autre Byte().

J'ai essayé d'extraire la position en faisant ainsi : mon_byte.FindIndex(mon_byte, StringDeRecherche) mais il me dit qu'il n'arrive pas à identifier les types de parametre :(

Avez-vous une idée ?

Merci d'avance

4 réponses

Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour

Tu peux convertir ta chaine en byte(), puis tu recherche la première occurence du premier octet, puis tu regarde les autres octets qui suivent et si tu trouve une différence, tu repar pour un tour à partir de 'occurence trouvée précédamment.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

c'est ce que j'ai fait en attendant une réponse. il n'a donc rien de plus propre ?

Je poste ma source ici pour ceux qui serait dans le même cas que moi :
<hr size="2" width="100%" />        ''' <summary>

        ''' Find the
string into the byte() encoded on Unicode

        ''' </summary>

        ''' Data on Unicode

        ''' String to find

        ''' return index of Xeme element find + length of text
parameter

        ''' <returns>Return index
of begin of string</returns>

        ''' <remarks></remarks>

        PrivateFunction findinbyte(ByRef
Data AsByte(),
ByVal text AsString, OptionalByVal nbr AsInteger = 1) AsInteger

            Dim
recherche AsByte()
= Encoding.Unicode.GetBytes(text)

            For
a AsInteger =
0 To Data.Count - 1 - recherche.Count - 1 Step 2

                For
b AsInteger =
0 To recherche.Count - 1

                    If
Data(a + b) <> recherche(b) Then

                        ExitFor

                    EndIf

                    If
b = recherche.Count - 1 Then

                        nbr -= 1

                        If nbr = 0 Then

                            Return
a + recherche.Count

                        EndIf

                    EndIf

                Next

            Next

            Return
-1

        EndFunction

<hr size="2" width="100%" />
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour

Il y a peut être plus propre, mais je ne connais pas.

Juste à titre d'info, il y a IndexOf(...) qui permet de trouver une valeur, peut être que ça peut accélérer ta recherche.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

Je vais y regarder, merci beaucoup