Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Puis le tampon est découpé en champs (dont je connais la position et la
longueur). Pour les champs String, il n'y a pas de problème mais en ce qui
concerne les champs numériques, la fonction CCur pour convertir en
Currency par exemple ne fonctionne pas car le type est incompatible. Ce
que j'ai besoin de connaître c'est la façon dont ces valeurs numériques
sont stockées sur disque afin que je puisse développer un algorythme qui
me permettre de les lire.
Surtout ne me dites pas d'utiliser des variables "Type défini par
l'utilisateur" pour enregistrer et lire les données; c'est justement ce
que je veux éviter.
Merci de vos lumières.
Pierre
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
"Pierre Archambault" wrote in message
news:N4Kdh.130713$Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Hello,
C'est quelque chose dont tu ne dois pas avoir
à te soucier, puisque si tu écris en binaire,
alors tu sais ce que tu écris, donc tu sais
ce que tu veux relire. Les PUT et les GET sont
consistants, dans la mesure ou tu écris et lis
des variables de même type.
Voici par exemple:
Dim f As Integer
Dim n As Long
n = -32768
f = FreeFile
Open "c:test.dat" For Binary As #f
Put #f, , n
Close #f
n = 0
f = FreeFile
Open "c:test.dat" For Binary As #f
Get #f, , n
Close #f
Debug.Print n
Sinon, les Integer et les Long sont stockés sur
4 octets, en little endian (LSB en premier), le
tout avec un bit de signe et en complément à 2
pour les négatifs...
Par exemple:
0 = 00 00 00 00
1 = 01 00 00 00
32767 = FF 7F 00 00
-1 = FF FF FF FF
-32767 = 01 80 FF FF
etc.
Ceci dit, c'est une (très) mauvaise(tm) idée
de stocker en format binaire:
- pas lisible par un humain
- pas portable (à cause de l'endianess qui peut varier)
- pénible à debugger
- etc.
A part pour des utilisations particulières (énormes
fichiers de données compressées, genre du flux audio
ou vidéo), cette méthode est à bannir à tout prix.
Les arguments de taille et de temps d'accès n'existent
peu ou plus sur les machines actuelles.
Voir à ce sujet:
http://faq.vb.free.fr/index.php?question3
Bien sur, il est possible que tu ais des contraintes
que je ne connais pas, tout est possible :-)
Bonne suite,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
"Pierre Archambault" <pierre.archambault@videotron.ca> wrote in message
news:N4Kdh.130713$Cu4.2136600@wagner.videotron.net...
Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Hello,
C'est quelque chose dont tu ne dois pas avoir
à te soucier, puisque si tu écris en binaire,
alors tu sais ce que tu écris, donc tu sais
ce que tu veux relire. Les PUT et les GET sont
consistants, dans la mesure ou tu écris et lis
des variables de même type.
Voici par exemple:
Dim f As Integer
Dim n As Long
n = -32768
f = FreeFile
Open "c:test.dat" For Binary As #f
Put #f, , n
Close #f
n = 0
f = FreeFile
Open "c:test.dat" For Binary As #f
Get #f, , n
Close #f
Debug.Print n
Sinon, les Integer et les Long sont stockés sur
4 octets, en little endian (LSB en premier), le
tout avec un bit de signe et en complément à 2
pour les négatifs...
Par exemple:
0 = 00 00 00 00
1 = 01 00 00 00
32767 = FF 7F 00 00
-1 = FF FF FF FF
-32767 = 01 80 FF FF
etc.
Ceci dit, c'est une (très) mauvaise(tm) idée
de stocker en format binaire:
- pas lisible par un humain
- pas portable (à cause de l'endianess qui peut varier)
- pénible à debugger
- etc.
A part pour des utilisations particulières (énormes
fichiers de données compressées, genre du flux audio
ou vidéo), cette méthode est à bannir à tout prix.
Les arguments de taille et de temps d'accès n'existent
peu ou plus sur les machines actuelles.
Voir à ce sujet:
http://faq.vb.free.fr/index.php?question3
Bien sur, il est possible que tu ais des contraintes
que je ne connais pas, tout est possible :-)
Bonne suite,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
FAQ VB: http://faq.vb.free.fr/
"Pierre Archambault" wrote in message
news:N4Kdh.130713$Bonjour à tous,
Je voudrais savoir comment VB enregistre dans un fichier les valeurs
numériques comme les Integers, Singles, Doubles, Currency etc.
La raison de cette demande est celle-ci:
Je stocke sur disque, des données que j'accède ensuite à l'aide de
l'instruction :
Open "Fichier.dat" for Binary Access Read Shared As #1
Seek #1,1
Get #1, Tampon$
Hello,
C'est quelque chose dont tu ne dois pas avoir
à te soucier, puisque si tu écris en binaire,
alors tu sais ce que tu écris, donc tu sais
ce que tu veux relire. Les PUT et les GET sont
consistants, dans la mesure ou tu écris et lis
des variables de même type.
Voici par exemple:
Dim f As Integer
Dim n As Long
n = -32768
f = FreeFile
Open "c:test.dat" For Binary As #f
Put #f, , n
Close #f
n = 0
f = FreeFile
Open "c:test.dat" For Binary As #f
Get #f, , n
Close #f
Debug.Print n
Sinon, les Integer et les Long sont stockés sur
4 octets, en little endian (LSB en premier), le
tout avec un bit de signe et en complément à 2
pour les négatifs...
Par exemple:
0 = 00 00 00 00
1 = 01 00 00 00
32767 = FF 7F 00 00
-1 = FF FF FF FF
-32767 = 01 80 FF FF
etc.
Ceci dit, c'est une (très) mauvaise(tm) idée
de stocker en format binaire:
- pas lisible par un humain
- pas portable (à cause de l'endianess qui peut varier)
- pénible à debugger
- etc.
A part pour des utilisations particulières (énormes
fichiers de données compressées, genre du flux audio
ou vidéo), cette méthode est à bannir à tout prix.
Les arguments de taille et de temps d'accès n'existent
peu ou plus sur les machines actuelles.
Voir à ce sujet:
http://faq.vb.free.fr/index.php?question3
Bien sur, il est possible que tu ais des contraintes
que je ne connais pas, tout est possible :-)
Bonne suite,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Bonjour Jean-Marc,
Je suis heureux que tu ait compris ma demande. Ta réponse est tout à fait
dans le sens de ce que j'attendais.
Cependant j'aimerais un peu plus d'éclaircissements au sujet des
complémemts de 2 pour les négatifs.
J'ai constaté que sur la calculatrice de Windows, (en mode scientifique),
si je tape -1 en binaire, et que je convertisse en décimal, j'obtiens :
une suite de 64 "1", ce qui m'a complètement décontenancé !
Si une variable Currency par exemple qui contient le nombre 22 est
sauvegardée dans un fichier, au moment de récupérer la chaîne de
caractères correspondant aux 8 bytes, nous avons les caractères suivants:
`[ . C'est-à-dire chr(96), chr(91), chr(3) et 5 autres chr(0).
Si nous retrouvons les valeurs binaires de chacun de ces nombres
96 : 01100000
91 : 01011011
3 : 00000011
et que nous les replacions dans l'ordre du moins significatif au plus
significatif, nous obtenons :
000000110101101101100000 et en retirant les 0 non significatifs,
110101101101100000
Cette valeur binaire correspond bien à 220000, et comme le format Currency
est sensé avoir été multiplié par 10000, il suffit de diviser par 10000
pour retrouver le nombre de départ (22).
Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
Bonjour Jean-Marc,
Je suis heureux que tu ait compris ma demande. Ta réponse est tout à fait
dans le sens de ce que j'attendais.
Cependant j'aimerais un peu plus d'éclaircissements au sujet des
complémemts de 2 pour les négatifs.
J'ai constaté que sur la calculatrice de Windows, (en mode scientifique),
si je tape -1 en binaire, et que je convertisse en décimal, j'obtiens :
une suite de 64 "1", ce qui m'a complètement décontenancé !
Si une variable Currency par exemple qui contient le nombre 22 est
sauvegardée dans un fichier, au moment de récupérer la chaîne de
caractères correspondant aux 8 bytes, nous avons les caractères suivants:
`[ . C'est-à-dire chr(96), chr(91), chr(3) et 5 autres chr(0).
Si nous retrouvons les valeurs binaires de chacun de ces nombres
96 : 01100000
91 : 01011011
3 : 00000011
et que nous les replacions dans l'ordre du moins significatif au plus
significatif, nous obtenons :
000000110101101101100000 et en retirant les 0 non significatifs,
110101101101100000
Cette valeur binaire correspond bien à 220000, et comme le format Currency
est sensé avoir été multiplié par 10000, il suffit de diviser par 10000
pour retrouver le nombre de départ (22).
Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
Bonjour Jean-Marc,
Je suis heureux que tu ait compris ma demande. Ta réponse est tout à fait
dans le sens de ce que j'attendais.
Cependant j'aimerais un peu plus d'éclaircissements au sujet des
complémemts de 2 pour les négatifs.
J'ai constaté que sur la calculatrice de Windows, (en mode scientifique),
si je tape -1 en binaire, et que je convertisse en décimal, j'obtiens :
une suite de 64 "1", ce qui m'a complètement décontenancé !
Si une variable Currency par exemple qui contient le nombre 22 est
sauvegardée dans un fichier, au moment de récupérer la chaîne de
caractères correspondant aux 8 bytes, nous avons les caractères suivants:
`[ . C'est-à-dire chr(96), chr(91), chr(3) et 5 autres chr(0).
Si nous retrouvons les valeurs binaires de chacun de ces nombres
96 : 01100000
91 : 01011011
3 : 00000011
et que nous les replacions dans l'ordre du moins significatif au plus
significatif, nous obtenons :
000000110101101101100000 et en retirant les 0 non significatifs,
110101101101100000
Cette valeur binaire correspond bien à 220000, et comme le format Currency
est sensé avoir été multiplié par 10000, il suffit de diviser par 10000
pour retrouver le nombre de départ (22).
Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
> Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
> Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
> Voilà pour le positif. Mais si je sauvegarde -22 dans mon fichier et que
je récupère la chaîne de 8 bytes, celle-ci à plutôt cette apparence:
¤üÿÿÿÿÿ. C'est-à-dire chr(160), chr(164), chr(252) et 5 autres chr(255).
re moi.
Décidément il faut que j'aille me coucher...
A0 en binaire vaut 1010 0000 et non pas 1000 0000 comme j'avais dit.
Le reste est correct, l'important ici est que le bit le plus à gauche vaut
1,
ce qui indique un nombre négatif.
voir d'ailleurs:
http://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
re moi.
Décidément il faut que j'aille me coucher...
A0 en binaire vaut 1010 0000 et non pas 1000 0000 comme j'avais dit.
Le reste est correct, l'important ici est que le bit le plus à gauche vaut
1,
ce qui indique un nombre négatif.
voir d'ailleurs:
http://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
re moi.
Décidément il faut que j'aille me coucher...
A0 en binaire vaut 1010 0000 et non pas 1000 0000 comme j'avais dit.
Le reste est correct, l'important ici est que le bit le plus à gauche vaut
1,
ce qui indique un nombre négatif.
voir d'ailleurs:
http://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic