Structure Message

cs_MicLau Messages postés 7 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2003 - 1 avril 2003 à 13:55
cs_MicLau Messages postés 7 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2003 - 2 avril 2003 à 16:21
Bonjour,

Je dois envoyer un message via TCPIP d'un ordinateur à un autre. Mon problème est le suivant :
Lorsque je concatène 3 champs, Delphi compresse mes données. Pour être plus clair, voilà un exemple :

Var
A:String[5]
B:String[5]
C:String[5]
CONCAT:String[15]

A:='AAA'
B:='BB'
C:='CCCC'

CONCAT:=A+B+C

--> Delphi me donne :
CONCAT = 'AAABBCCCC'
--> Alors que je souhaiterai avoir :
CONCAT = 'AAASSBBSSSCCCCS' ('S' correspond à un espace).

En effet, le PC receveur reçoit le message dans une structure prédéfinie.

Que puis-je faire pour résoudre ce souci ?

En fait, dans mon exemple, j'ai pris des champs ShortString dimensionnés. Mais, quelle solution pourrait être possible si j'opte pour des champs String pour mes variables ?

Merci grandement d'avance pour vos solutions, car à ce jour, je suis vraiment bloqué pour la suite de mes développements.

4 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
1 avril 2003 à 18:36
Il te suffit, je pense, de remplir au préalable tes variables avec des espaces...

Une boucle suffit pour cela :

for i := 1 to 5 do
A[i] := ' ';
A := 'AAA';

Alors, ton CONCAT te donnera normalement ce que tu veux !

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol. ]
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 avril 2003 à 21:39
De remplir au préalable avec des espaces ne change rien au problème puisque Delphi ajustera l'octet contenant la longueur de la chaine.
Utiliser des string ne change rien non plus puisque la chaine sera suivi d'un caractère nul pour indiquer la terminaison.
Il ne reste donc plus qu'à ajuster chaque chaine pour qu'elle contienne le nombre de caractères voulus en lui ajoutant des espaces à droite.

May Delphi be with you
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
2 avril 2003 à 09:58
Flûte !!

J'avais corrigé, juste après avoir posté mon message, ce que j'avais dis... Je m'étais rendu compte que ce que j'avais fait était nul, et j'avais remis un code qui devait normalement marcher... Mais comme le réseau CodeS-SourceS rame un peu aux heures de pointe, bah ce n'est apparemment pas passé !

Encore désolé pour l'erreur que j'ai faite, mais je l'avais corrigée, en montrant ce que tu dis ici, cher Delphiprog !!

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol.]
0
cs_MicLau Messages postés 7 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2003
2 avril 2003 à 16:21
Ca y est, ca fonctionne !
J'ai dû créer des fonctions qui me permettent de concaténer des blancs pour atteindre la longueur du champ réelle à envoyer.
Je ne savais pas que Delphi gérer le contenu des variables de façon dynamique (étant un peu novice dans Delphi).

Merci beaucoup pour votre aide !
0
Rejoignez-nous