Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Les commandes FILEBIN... Ven 15 Juin 2012 - 11:48 | |
| Bonjour, Jack va commencer à regretter de me voir revenir sur le forum... Les commandes FILEBIN_#### me paraissent difficilement exploitables... ou c'est moi qui ne pige pas bien leur fonctionnement... Un petit exemple est mieux qu'un long discours... Ce que j'aurais aimer pouvoir faire avec ces fonctions (pseudo-code): - Code:
-
DIM a% : a% = 10 DIM b% : b% = 51966 DIM c : c = -118.625 DIM txt$ : txt$="TOTO"
FILEBIN_OPEN_WRITE 1,"D:\TEST.BIN"
FILEBIN_WRITE 1,4,a% 'ce qui donnerai -> 0000: 00 00 00 0A
FILEBIN_WRITE 1,LEN(txt$),txt$ ' -> 0000: 00 00 00 0A 54 4F 54 4F
FILEBIN_WRITE 1,2,a% ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 0A
FILEBIN_WRITE 1,4,b% ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 0A 00 00 CA FE
FILEBIN_WRITE 1,4,c ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 0A 00 00 CA FE C2 ED 40 00 (IEEE754, 32bits)
Qu'en pensez-vous ? Quelqu'un a déjà utilisé ces fonctions ? | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Les commandes FILEBIN... Ven 15 Juin 2012 - 13:01 | |
| Voici ce que l'on peut faire, et ce que l'on ne peut pas faire. J'ai repris ton pseudo-code et j'y ai ajouté mes lignes: - Code:
-
DIM a% : a% = 10 DIM b% : b% = 51966 DIM c : c = -118.625 DIM txt$ : txt$="TOTO"
FILEBIN_OPEN_WRITE 1,"D:\TEST.BIN"
FILEBIN_WRITE 1,4,a% 'ce qui donnerai -> 0000: 00 00 00 0A
FILEBIN_WRITE 1,LEN(txt$),txt$ ' -> 0000: 00 00 00 0A 54 4F 54 4F
FILEBIN_WRITE 1,2,a% ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 00 00 0A ici, il manquait "00 00" !
FILEBIN_WRITE 1,4,b% ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 00 00 0A 00 00 CA FE
FILEBIN_WRITE 1,4,c ' -> 0000: 00 00 00 0A 54 4F 54 4F 00 00 00 0A 00 00 CA FE C2 ED 40 00 (IEEE754, 32bits)
' Pour écrire systématiquement 4 octets binaires pour chaque variable, ' on peut faire ceci dim s$, i% s$ = right$("000000"+hex$(a%),8) FILEBIN_HEXA_WRITE 1,4,s$ ' s$ = right$("000000"+hex$(c),8) : ' ne peut pas marcher: hex$ attent un entier ! FILEBIN_HEXA_WRITE 1,4,s$ ' s$ = ""' Pour une variable texte, il faut la convertir en chaîne hexa: for i%=1 to len(txt$) s$ = s$ + hex$(asc(mid$(txt$,i%,1))) next i% FILEBIN_HEXA_WRITE 1,len(txt$),s$
| |
|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Les commandes FILEBIN... Ven 15 Juin 2012 - 13:28 | |
| Merci Klaus ! Je suis un peu rouillé... J'avais fait l'impasse sur FILEBIN_HEXA_### ... Pour ma défense : C'est un peu perturbant de convertir une donnée numérique en chaine de caractère pour pouvoir ensuite l'écrire dans un fichier binaire... Sinon, une solution pour les flottants : - ils faut convertir le float en chaine, puis écrire dans le fichier la longueur de la chaine suivi de la chaine de caractère elle-même... ce qui nous donne: - Code:
-
DIM c ,i%, s$ c=1.231 s$= right$("0000000"+hex$(len(str$(c))),8) : ' pour conserver l'idée des 4 octets pour des entiers ;) print "valeur:";c print "longueur chaine:";s$ for i%=1 to len(str$(c)) s$ = s$ + hex$(asc(mid$(str$(c),i%,1))) next i% print "long+chaine à écrire:";s$;" (nb octets:";len(s$)/2;")"
Dernière édition par Nardo26 le Ven 15 Juin 2012 - 14:02, édité 1 fois | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Les commandes FILEBIN... Ven 15 Juin 2012 - 13:32 | |
| Oui, c'est faisable. Ce qui manque, ce sont des commandes: FILEBIN_BYTE_WRITE (identique à FILEBIN_WRITE) FILEBIN_WORD_WRITE FILEBIN_INTEGER_WRITE FILEBIN_FLOAT_WRITE FILEBIN_STRING_WRITE et les commandes symmétriques pour FILEBIN_xxx_READ. C'est vrai, ce serait un progrès. | |
|
Contenu sponsorisé
| Sujet: Re: Les commandes FILEBIN... | |
| |
|