OVH Cloud OVH Cloud

Comment comparer deux structures ?

6 réponses
Avatar
Loïc
Bonjour, j'ai une question un peu bête.

J'aimerai pouvoir comparer deux structures en vb mais je ne sais pas
comment faire.

exemple de code:

Public Type rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

dim rect1 as rect
dim rect2 as rest

with rect1
.left = 4
.top = 4
.right = 10
.bottom = 20
wend

with rect2
.left = 4
.top = 4
.right = 10
.bottom = 20
wend


j'aimerai maintenant pouvoir effectuer l'opération de comparaison
suivante:

if rect1 = rect2 then
...
end if

mzid ca n'a pas l'air d'être la bonne syntaxe.
Si vous pouviez m'aider.

Merci

--
Loïc

6 réponses

Avatar
YannX
Bnjr,

Une classe Rect avec un opérator=(&Rect...) hélas, c'est du C++
Public Function Rect_Egal(ByVal r1 as Rect, byVal r2 as Rect)
With r1
if ( .left = r2.left) _
and ( .Top= r2.Top) _
and ( .Right= r2.Right) _
and ( .Bottom= r2.Bottom) _
then Rect_Egal = true
End With
End Function

L'autre solution est de faire une comparaison "texte"
en utilisant les adresses des deux variables, et leur sizeof()...
Quelqu'un connait en VB : cela sera sans doute plus rapide .....
YannX

"Loïc" a écrit dans le message de
news:
Bonjour, j'ai une question un peu bête.

J'aimerai pouvoir comparer deux structures en vb mais je ne sais pas
comment faire.

exemple de code:

Public Type rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

dim rect1 as rect
dim rect2 as rest

with rect1
.left = 4
.top = 4
.right = 10
.bottom = 20
wend

with rect2
.left = 4
.top = 4
.right = 10
.bottom = 20
wend


j'aimerai maintenant pouvoir effectuer l'opération de comparaison
suivante:

if rect1 = rect2 then
...
end if

mzid ca n'a pas l'air d'être la bonne syntaxe.
Si vous pouviez m'aider.

Merci

--
Loïc



Avatar
Loïc
merci beaucoup pour ton aide. C'est effectivement dommage qu'en vb on
ne puisse pas redéfinir des opérateurs. Je pensais qu'il y avait au
moins une fonction de comparaison interne au language.

--
Loïc
Avatar
Loïc
Non hélas, c'est pour de grosses structures personnalisées.

--
Loïc
Avatar
christophe-pasde
Si c'est uniquement pour cette structure il y a les API qui vont bien,

si c'est pour toutes les structures alors là .... reste à comparer les
champs un a un

Christophe


YannX a écrit :

Bnjr,

Une classe Rect avec un opérator=(&Rect...) hélas, c'est du C++
Public Function Rect_Egal(ByVal r1 as Rect, byVal r2 as Rect)
With r1
if ( .left = r2.left) _
and ( .Top= r2.Top) _
and ( .Right= r2.Right) _
and ( .Bottom= r2.Bottom) _
then Rect_Egal = true
End With
End Function

L'autre solution est de faire une comparaison "texte"
en utilisant les adresses des deux variables, et leur sizeof()...
Quelqu'un connait en VB : cela sera sans doute plus rapide .....
YannX

"Loïc" a écrit dans le message de
news:

Bonjour, j'ai une question un peu bête.

J'aimerai pouvoir comparer deux structures en vb mais je ne sais pas
comment faire.

exemple de code:

Public Type rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

dim rect1 as rect
dim rect2 as rest

with rect1
.left = 4
.top = 4
.right = 10
.bottom = 20
wend

with rect2
.left = 4
.top = 4
.right = 10
.bottom = 20
wend


j'aimerai maintenant pouvoir effectuer l'opération de comparaison
suivante:

if rect1 = rect2 then
...
end if

mzid ca n'a pas l'air d'être la bonne syntaxe.
Si vous pouviez m'aider.

Merci

--
Loïc








Avatar
YannX
Alors regarde la comparaison 'binaire',
en plaçant les zones en chaînes de caractères

Ou bien écris une DLL C++ pour ta classe !
Il y a plein d'articles pour cela...
YannX
"Loïc" a écrit dans le message de
news:
Non hélas, c'est pour de grosses structures personnalisées.

--
Loïc



Avatar
Pierre B.
Bonjour, Loïc a écrit :
Bonjour, j'ai une question un peu bête.

J'aimerai pouvoir comparer deux structures en vb mais je ne sais pas
comment faire.

exemple de code:

Public Type rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

dim rect1 as rect
dim rect2 as rest

with rect1
.left = 4
.top = 4
.right = 10
.bottom = 20
wend

with rect2
.left = 4
.top = 4
.right = 10
.bottom = 20
wend




Je vais peut être répondre à côté, mais s'il s'agit de comparer
finalement des formes (des rectangles), les api de regions qui
permettent de savoir si une forme A est contenue dans une forme B,
peuvent peut-être t'aider. Cf l'API guide.

Bon courage.

--
Pierre B.