Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Fichiers | |
| | Auteur | Message |
---|
jasym
Nombre de messages : 23 Date d'inscription : 16/01/2014
| Sujet: Fichiers Jeu 13 Fév 2014 - 16:40 | |
| Bonjour,
J'essaie d'écrire et lire un fichier. Première tentative réussie. Mais cela n'est vrai que pour des transferts de 1 octet!!!
Je travaille en fichiers binaires. Comment peut-on écrire un nombre entier dans un fichier? En BASIC il suffisait de spécifier le nombre d'octets nécessaires pour loger un nombre.
En examinant les instructions et le manuel de l'utilisateur je n'arrive à rien de rien. Pas moyen de loger un simple nombre entier dans un fichier. Quel est votre truc?
Jasym | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fichiers Jeu 13 Fév 2014 - 17:01 | |
| Bonjour jasym,
Est-ce que tu utilises bien les instructions panoramic spécifiques pour les fichiers binaires ? ce sont des fonctions que j'utilise régulièrement, et je t'assure qu'elles ne posent aucun problème: Ouverture: FILEBIN_OPEN_READ ou WRITE, ou APPEND Lecture/Écriture: FILEBIN_READ lecture d'un octet, FILEBIN_BLOCK_READ lecture d'une série d'octets, FILEBIN_WRITE et FILEBIN_BLOCK_WRITE pour écrire un ou une série d'octets... Fermeture: FILEBIN_CLOSE
Donne un exemple de ce que tu fais, pour voir...
PS dans un fichier binaire, on ne précise pas qu'on écrit un nombre entier ou n'importe quoi d'autre, ce sont des octets binaires, c'est tout. C'est à toi de préciser si la valeur que tu écris fait un, deux ou n'importe quel nombre d'octets. Tu dis à la fonction que tu veux écrire 5 octets, elle se fiche de ce qu'il y a dedans, ce sont 5 valeurs consécutives entre 0 et 255, c'est tout. | |
| | | jasym
Nombre de messages : 23 Date d'inscription : 16/01/2014
| Sujet: Fichiers Jeu 13 Fév 2014 - 17:41 | |
| Bonjour JL35,
J'utilise les bonnes instructions.
Pour écrire une variable, par exemple nb% = 856 le message d'erreur mentionne que je ne peux utiliser une valeur au-dessus de 255. Certes, il n'y a qu'un octet de disponible!
Alors comment écrire au fichier une valeur de 856 ou 230538? Et si je ne sais pas d'avance la valeur de la variable?
J'utilise FILEBIN_WRITE N,V .
Faut-il que je décortique la variable en n octets et que je fasse une routine pour l'enregistrer? C'est affreux!
J'ai essayé avec FILEBIN_HEXA_WRITE N, C, S mais je ne comprends pas l'usage de cette instruction.
Jasym | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fichiers Jeu 13 Fév 2014 - 18:00 | |
| Mais oui, il faut que tu décortiques la variable pour la décomposer en octets élémentaires, pour l'écrire dans ton fichier octet par octet. Dans un fichier binaire on n'écrit que du binaire, des octets, il n'y a pas de notion d'entier, d'alphanumérique ou quoi que ce soit, ce sont des valeurs individuelles comprises entre 0 et 255, et c'est tout, il n'y a aucune interprétation de ces valeurs. Ou bien tu fais un programme qui réduit ta valeur en octets, par divisions successives par 256 (ce n'est pas bien difficile), ou bien tu utilises les fonctions chaînes pour écrire tes valeurs en ascii, mais alors ce ne sont plus les instructions fichiers mode binaire mais fichiers mode ascii. Le Filebin_Hexa_Write te permet d'exprimer tes valeurs en hexacécimal, mais ce sera toujours octet par octet, sous forme d'une chaîne de caractères. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fichiers Jeu 13 Fév 2014 - 18:13 | |
| Si je reprends ta valeur de 230538 ci-dessus, tu peux l'écrire en binaire en la convertissant d'abord en hexadécimal (c'est la fonction HEX$ qui fait le boulot de conversion en binaire, sous forme hexa): - Code:
-
dim a, h$, f$ f$ = "Z:\bin": ' fichier résultat a = 230538: ' valeur à écrire en binaire
h$ = hex$(a): ' conversion en notation hexadécimale IF BIN_AND(LEN(h$),1) = 1 THEN h$ = "0"+h$: ' nombre impair de caractères print h$: ' pour voir
filebin_open_write 1,f$ filebin_hexa_write 1,len(h$)/2,h$ filebin_close 1 malheureusement la fonction hex$ peut donner un nombre impair de caractères (c'est le cas ici), il faut tester pour rajouter un zéro en tête, parce que le filebin_hexa_write exige un nombre pair, chaque groupe de deux caractères représentant un octet, de poids plus ou moins fort suivant sa position dans la chaîne. NB la fonction HEX$ n'accepte que des entiers (<= 2147483647, ce qui donne en hexa 7FFFFFFF) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fichiers Jeu 13 Fév 2014 - 22:39 | |
| Pour accéder les fichiers binaires, tu peux aussi, avantageusement, utiliser les fonction de gestion de fichiers binaires de KGF.dll. C'est beaucoup plus souple que les commandes Panoramic, et beaucoup plus puissant. | |
| | | jasym
Nombre de messages : 23 Date d'inscription : 16/01/2014
| Sujet: fichiers Jeu 13 Fév 2014 - 23:15 | |
| - JL35 a écrit:
- Si je reprends ta valeur de 230538 ci-dessus, tu peux l'écrire en binaire en la convertissant d'abord en hexadécimal (c'est la fonction HEX$ qui fait le boulot de conversion en binaire, sous forme hexa):
- Code:
-
dim a, h$, f$ f$ = "Z:\bin": ' fichier résultat a = 230538: ' valeur à écrire en binaire
h$ = hex$(a): ' conversion en notation hexadécimale IF BIN_AND(LEN(h$),1) = 1 THEN h$ = "0"+h$: ' nombre impair de caractères print h$: ' pour voir
filebin_open_write 1,f$ filebin_hexa_write 1,len(h$)/2,h$ filebin_close 1 malheureusement la fonction hex$ peut donner un nombre impair de caractères (c'est le cas ici), il faut tester pour rajouter un zéro en tête, parce que le filebin_hexa_write exige un nombre pair, chaque groupe de deux caractères représentant un octet, de poids plus ou moins fort suivant sa position dans la chaîne.
NB la fonction HEX$ n'accepte que des entiers (<= 2147483647, ce qui donne en hexa 7FFFFFFF) Un grand merci JL35. Je suis O.K. pour enregistrer jusqu'à 8 octets. Mais pour lire! C'est impossible... Il faut donc prévoir d'avance un enregistrement régulier, par exemple tout en 4 octets. Au pire en 8 octets mais cela nolise de la mémoire inutilement. En BASIC c'était plus facile de gérer l'espace mémoire. Pour collecter des données en 16 bits, il suffit alors d'utiliser 4 octets en régulier. Jasym | |
| | | jasym
Nombre de messages : 23 Date d'inscription : 16/01/2014
| Sujet: FICHIERS Ven 14 Fév 2014 - 0:16 | |
| - Klaus a écrit:
- Pour accéder les fichiers binaires, tu peux aussi, avantageusement, utiliser les fonction de gestion de fichiers binaires de KGF.dll. C'est beaucoup plus souple que les commandes Panoramic, et beaucoup plus puissant.
Merci Klaus, Je pense avoir repérer le fichier pertinent dont KGF.pdf. J'ai survolé rapidement. Je ferai des essais quand je serai un peu mieux autonome dans Panoramic. Pour l'instant c'est encore une montagne pour moi. Je t'en ferai écho. Jasym | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fichiers Ven 14 Fév 2014 - 0:23 | |
| Juste un petit conseil: si possible, utilise KGF.chm au lieu de KGF.pdf.
Le contenu est identique, mais tu as la navigation facile des fichiers d'aide de Microsoft. C'est beaucoup plus compact et beaucoup plus rapide. | |
| | | Contenu sponsorisé
| Sujet: Re: Fichiers | |
| |
| | | | Fichiers | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |