Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SOS probleme de programmation de protocole.

10 réponses
Avatar
mobilom
Bonjour a tous.

j'ai un gros probleme et je n'arrive pas à m'en sortir.

Quelqu'un sait si il existes des composants vb6 adaptés à ce gendre de cas ?

Merci beaucoup a tous.


Je recoit une chaine de caractere comprenant de nombreux champs.

Il y a une premiere partie où les champs se suivent dans un ordre défini.

Certains champs ont une taille défini (int long etc...) et c'est donc
facile de les retrouver.

Mais d'un seul coup, au milieu, il y a des champs textes de taille
variable finissant par un 0 et j'ai vraiment du mal à retirer ces champs
de la chaine et surtout, en sortant de ce champs de savoir où j'en suis
avec mes champs à longueur fixe.

Et pour finir, une fois que tous les champps dans l'ordre sont passé, il
y a un certain nombre de champs dans le désordre au format TLV (type
longueur valeur par exemple pour un champs contenant TEST dont le type
est 5 on trouve dans la chaine 0504TEST)


je suis certain que ce genre de décodage est courant mais j'ai eu beau
chercher sur le net je n'ai trouvé aucun composant vb6 compatible.

Savez vous pù chercher ?

Merci.

10 réponses

Avatar
Patrick Philippot
Bonjour,

Il me semble que l'utilisation d'expressions régulières devrait résoudre
le problème. Il n'y a pas de support pour les expressions régulière dans
VB6 mais vous pouvez ajouter une référence à Microsoft VBScript Regular
Expressions dans votre projet.

Documentation ici:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting051099.asp

Ceci étant, selon la spécification de votre format de chaîne, les
expressions régulières peuvent ne pas couvrir tous les cas possibles. Il
faudrait voir cette spécification pour être plus précis. Dans ce cas, il
faudra s'engager dans la voie du parsing: définir une grammaire et
analyser le texte avec un parseur généré à partir de cette grammaire.
C'est une activité beaucoup plus complexe.

Je pense que dans votre cas, il y a de bonnes chances pour que les
expressions régulières suffisent.

L'alternative étant bien sûr d'écrire un code d'analyse spécifique.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
andre.araste
Bonjour

Je crois que ce n'est pas un composant VB6 qu'il vous faut mais de solides
connaissances en manipulation des chaînes de caractères qui fleurent bon le
basic sous DOS

Left$ - Right$ - Mid$ - Str$ Instr$ etc ....

Il faut également rechercher le mode de lecture qui correspondrait au plus
juste au mode d'écriture des données.
--
Bonne réception.

http://perso.wanadoo.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.



"mobilom" a écrit dans le message de news:

Bonjour a tous.

j'ai un gros probleme et je n'arrive pas à m'en sortir.

Quelqu'un sait si il existes des composants vb6 adaptés à ce gendre de cas
?

Merci beaucoup a tous.


Je recoit une chaine de caractere comprenant de nombreux champs.

Il y a une premiere partie où les champs se suivent dans un ordre défini.

Certains champs ont une taille défini (int long etc...) et c'est donc
facile de les retrouver.

Mais d'un seul coup, au milieu, il y a des champs textes de taille
variable finissant par un 0 et j'ai vraiment du mal à retirer ces champs
de la chaine et surtout, en sortant de ce champs de savoir où j'en suis
avec mes champs à longueur fixe.

Et pour finir, une fois que tous les champps dans l'ordre sont passé, il y
a un certain nombre de champs dans le désordre au format TLV (type
longueur valeur par exemple pour un champs contenant TEST dont le type
est 5 on trouve dans la chaine 0504TEST)


je suis certain que ce genre de décodage est courant mais j'ai eu beau
chercher sur le net je n'ai trouvé aucun composant vb6 compatible.

Savez vous où chercher ?

Merci.



Avatar
mobilom
andre.araste a écrit:
Bonjour

Je crois que ce n'est pas un composant VB6 qu'il vous faut mais de solides



Mais je suis sur que ca existe.

connaissances en manipulation des chaînes de caractères qui fleurent bon le
basic sous DOS

Left$ - Right$ - Mid$ - Str$ Instr$ etc ....




Ca je connais, mais c'est compliqué.


Pour l'envoi des données, j'ai fait un type personnel du genre :
Type tata
toto As String * 5
titi As String
tata As Byte
End Type


Puis ma variable

dim test tata

ensuite j'ai rempli ma variable :

test.toto="ABCDE"
test.titi="FGHIJK"+chr(0)
test.tata%


Maintenant, je dois envoyer ca bit par bit pour le transmettre.

j'arrive pas à trouver un moyen d'acceder au premier bit de la variable
test, puis au suivant, etc.... jusqu'au 13é bit de la variable.

J'arrive pas non plus à avoir la taille de la variable test.

len(test) me donne 10 une fois que la variable est remplie, alors que ca
devrait me donner 13


Quelqu'un peut me dire comment faire ? En C, c'est un jeu d'enfant (on
rempli la structure et on envoye chaque bit de la structure un par un du
debut à la fin). Mais là, en VB6 je suis completement perdu.

Merci.
Avatar
Patrick Philippot
mobilom wrote:
andre.araste a écrit:
Bonjour

Je crois que ce n'est pas un composant VB6 qu'il vous faut mais de
solides



Mais je suis sur que ca existe.



Oui, je viens de vous l'indiquer. La solution proposée ne convient pas?

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Patrick Philippot
mobilom wrote:
andre.araste a écrit:
Bonjour

Je crois que ce n'est pas un composant VB6 qu'il vous faut mais de
solides



Mais je suis sur que ca existe.



Oui, j'ai déjà répondu ce matin mais sur microsoft.public.fr.vb (je ne
cross-poste pas les réponses - quand vous cross-postez sur plusieurs
serveurs, il faut au moins surveiller chaque serveur :-) ).

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
mobilom
Patrick Philippot a écrit:
mobilom wrote:

andre.araste a écrit:

Bonjour

Je crois que ce n'est pas un composant VB6 qu'il vous faut mais de
solides



Mais je suis sur que ca existe.




Oui, j'ai déjà répondu ce matin mais sur microsoft.public.fr.vb (je ne
cross-poste pas les réponses - quand vous cross-postez sur plusieurs
serveurs, il faut au moins surveiller chaque serveur :-) ).





Bonjour.

J'ai du aller voir votre message ailleurs, il n'est pa dans mpfvb sur les
sevrurs de free.

En fait les regex ne peuvent rien dans mon cas.

Je suis sur qu'il doit exister des ocx specialisés das les protocoles de
communications, mais en attendant j'essaye de me débrouiller :)

je bloque sur un truc (qui serait surement integré à une telle ocx).

Si je veux envoyer le nombre 9000 dans un champs long (4 octets), je dois
envoyer chr(0) puis chr(0) puis chr(35) puis chr(40)

J'arrive pas à trouver comment faire la conversion..

Si quelqu'un pouvait m'aider ca me rendrait vraiment service... a defaut de
trouver l'ocx qui va bien.

Au passage, connaissez vous des gros sites de telechargement d'ocx ou
d'activex ?

Merci.
Avatar
Fred
Dans son message 42e56088$0$8528$
mobilom nous dit :


Si je veux envoyer le nombre 9000 dans un champs long (4 octets), je
dois envoyer chr(0) puis chr(0) puis chr(35) puis chr(40)



Oula, tu as donc un mélange de binaire et d'ASCII dans tes trames.
Effectivement, les expressions régulières ne devraient pas trop t'aider.
Un ocx, cela m'étonnerait que tu trouves cela. Ton protocole est trop
spécialisé.

Non, moi je vois plutôt un bon retroussage de manches.

Pour le problème cité au dessus :
9000 = 0*256^3 + 0*256^2 + 35*256 + 40
0, 0, 35 et 40 sont les 4 octets représentant 9000 en mémoire et tu dois
les envoyer du poids le plus fort au poids le plus faible (selon ton
protocole).


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Outlook Express et les News : http://foleide.free.fr/prmoe.htm
Avatar
Jean Luc
Fred a écrit:
Dans son message 42e56088$0$8528$
mobilom nous dit :


Si je veux envoyer le nombre 9000 dans un champs long (4 octets), je
dois envoyer chr(0) puis chr(0) puis chr(35) puis chr(40)




Oula, tu as donc un mélange de binaire et d'ASCII dans tes trames.
Effectivement, les expressions régulières ne devraient pas trop t'aider.
Un ocx, cela m'étonnerait que tu trouves cela. Ton protocole est trop
spécialisé.

Non, moi je vois plutôt un bon retroussage de manches.

Pour le problème cité au dessus :
9000 = 0*256^3 + 0*256^2 + 35*256 + 40
0, 0, 35 et 40 sont les 4 octets représentant 9000 en mémoire et tu dois
les envoyer du poids le plus fort au poids le plus faible (selon ton
protocole).





Bonjour et merci de votre réponse.

Y ayant passé la nuit j'ai trouvé la solution.

En fait mon prorocole n'a rien de spécialisé, c'est plutot visual basic qui
ne semble pas suffisement "pro".

En C, tu cree une variable long tu met 9000 dedans, tu l'envoye vers ton
port de communication, et tu est certain qu'il va t'envoyer soir 0 0 35 40
soit 40 35 0 0 (je mélange toujours le bit de poid fort et faible) puisque
c'est comme cela qu'il stocke 9000 en mémoire dans un long.

J'imagine que ca marche comme ca dans tous les langages.


Maintenant, j'ai tellement avancé le prjet que l'ocx que je demandais me
servirait plus à grand chose, j'ai presque fait tout même.

Mais y a un endroit où je galere et j'ai fait tres cmpliqué alors qu'on
pourrait surement faire tres simple.

je vais poser la question dans un nouveau thread.

Merci de votre aide.
Avatar
Fred
Dans son message
Jean Luc nous dit :

[...]

En fait mon prorocole n'a rien de spécialisé, c'est plutot visual
basic qui ne semble pas suffisement "pro".



Malheureux, Pas ici ;-)

En C, tu cree une variable long tu met 9000 dedans, tu l'envoye vers
ton port de communication, et tu est certain qu'il va t'envoyer soir
0 0 35 40 soit 40 35 0 0 (je mélange toujours le bit de poid fort et
faible) puisque c'est comme cela qu'il stocke 9000 en mémoire dans un
long.
J'imagine que ca marche comme ca dans tous les langages.



Il y a des moyens en VB aussi. Mais tu as bien parlé d'une chaîne de
caractères ? Si tu récupérais les données en binaire directement tu
aurais sans doute moins de problèmes. Mais nous ne savons pas d'où
proviennent ces données.

[...]


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Outlook Express et les News : http://foleide.free.fr/prmoe.htm
Avatar
Patrick Philippot
mobilom wrote:
Au passage, connaissez vous des gros sites de telechargement d'ocx ou
d'activex ?



www.componentsource.com

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr