TBLOBFIELD

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
- 4 juil. 2007 à 00:55
cs_AccessToYou
Messages postés
34
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
16 juin 2016
- 4 juil. 2007 à 02:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43332-tblobfield

cs_AccessToYou
Messages postés
34
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
16 juin 2016
1
4 juil. 2007 à 02:08
54 bytes c'est ça....
merci f0xi, c'est très gentil de ta part mais:
tes remarque au sujet de la declaration d'enregistrement ne marche plus avec les PACKED RECORD.
on ne peut pas utiliser un type de donnée de capacité non definie comme STRING.

le mot PACKED fait tt la différence.
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
38
4 juil. 2007 à 00:55
salut,

bon, c'est pas mal comme debut mais j'ai quelques conseils a te donner :

premierement evite dans tes commentaires de code de mettre des abreviations de langage (qq, +sieur etc)

deuxiement evite aussi les "lol" dans ces derniers, le "lolage" est trés mal vus. au mieux mets un smyle de ce style :) ou ;)

troisiement la partie "explication finale" est faite pour emetre des remarques importantes concernant le programme/le code que tu a mis. en aucuns cas tu ne peu y exposer ta vie etc.

quatriement les commentaires qu'on inclus dans le code doivent toujours etre hors du code, bien que le concept de placer par exemple : (..., SizeOf(truc) {xx bytes} ); ne soit pas une erreur, il est plus simple de la placer aprés, ou a la declaration du type (comme tu l'as fait plus haut). tu remarquera trés vite que ce genre de positionnement des commentaires (a l'interieur du code) devient exasperant quand on remanie ce dernier.
par exemple pour un record tu peu faire :
type
{ TTruc
size : 54 bytes [ 4 | 21 | 21 | 8 ]
}
TTruc = record
A : integer;
B : string[20];
C : string[20];
D : double;
end;

ce qui permet de donner une information courte et comprehensible, et surtout bien respecter le sens de la declaration.
pour ce qui est string dans les records il y a une technique un peu plus complexe mais qui permet d'optimiser le poids des données quand les chaines peuvent etre de longeur trés variables :

TTruc = record
ASize, BSize : Cardinal;
AStr, BStr : String;
end;

ici la techinique consiste a lire la taille des chaines en premier (8 octets) ensuite on aurat plus qu'a ajuster la taille de AStr et BStr pour les lires :

Read(MonTruc.ASize, 4);
Read(MonTruc.Bsize, 4);
SetLength(MonTruc.AStr, MonTruc.ASize);
SetLength(MonTruc.BStr, MonTruc.BSize);
Read(MonTruc.AStr, MonTruc.ASize);
Read(MonTruc.BStr, MonTruc.BSize);

parfois il vaut mieux bouffer 8 octets de plus mais au final ce sera toujours moins que des chaines fixe de 20 ou 80 ou plus octets, qui ne seront pas remplie a fond forcement.
le type Cardinal pour ASize ou BSize est facultatif, si on sais que les chaines sont plutot courte on peu le reduire en Word (max=65535) ou Byte (max=255).
ce qui permet de stocker n'importe quel type de chaine de caractere (mots, phrase, page de texte, livre dont la taille est inferieure a 2Go).

et pour finir, même si l'exemple est court, un petit programme d'exemple dans une archive ne fait jamais de mal.