Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile Mer 27 Fév 2013 - 13:42 | |
| Nouvelle version: KGF.dll V1.96 du 27 Février 2013J'ai ajouté une fonction dérivée de ReadBlockFromBinaryFileToString: KGF.dll: res% = dll_call5("ReadBlockFromBinaryFile",nom$,adr%,n%,p%) KGF_SUB.bas: ReadBlockFromBinaryFile(nom$,adr%,n%,p%) Cette fonction est spécialement étudiée pour lire une partie d'un fichier binaire directement dans une variable de type entier ou flottant. On peut maintenant aisément créer, lire et modifier un fichier binaire contenant des données mixtes composées de flottants, entiers et chaînes de caractères. On peut par exemple créer un fichier avec des enregistrements de longueur fixe, accéder à un enregistrement binaire en entier, ou accéder directement n'importe quelle zone. Voici un programme de démo de cette fonctionnalité. Il contient des commentaires expliquant son fonctionnement, mais le principe est le suivant: au lancement, il crée un petit ficher de 12 enregistrements de 72 caractères, chacun étant composé de 3 zones: un entier contenant le numéro d'enregistrement, un flottant contenant ce numéro multiplié par 3 + 0.17, et une chaîne de caractères de longueur 60 caractères, contenant str$(la zone 2). Le programme affiche alors un champ de saisie de numéro d'enregistrement et un bouton "Lire". On saisit le numéro, et les zones sont affichées dans un mémo. - Code:
-
' demo_fichiers_binaires_zones_fixes.bas
' Ce programme crée un fichier binaire contenant ' 12 "enregistrements" ayant chacun 3 zones: ' 1 entier contenant le numéro d'enregistrement ' 1 flottant contenant le numéro d'enregistrement * 3 + 0.17 ' 1 chaîne de caractères contenant str$(zone flottante) ' Afin de produire des enregsitrements de longueur fixe, ' la 3ème zone est fixée à 60 caractères. Chaque enregsitrement ' a donc 4 + 8 + 60 = 72 caractères. ' ' Le programme propose une zone pour saisir un numéro d'enregistrement ' entre 1 et 12, un bouton "Lire" et un mémo montrant les données lues.
label lire
dim i%, v, s$, buf$, n%, p%, num% dim nom$ : nom$ = "test_fichier_binaire.dat"
alpha 1 : top 1,20 : left 1,20 : caption 1,"Enregistrement (1...12):" edit 11 : top 11,20 : left 11,150 : width 11,40 : text 11,"0" button 12 : top 12,50 : left 12,150 : caption 12,"Lire" : on_click 12,lire memo 13 : top 13,80 : left 13,150 : width 13,300 : height 13,300
KGF_initialize("KGF.dll")
' on crée d'abord un fichier "vide" de 12*72 caractères, ' soit 864 caractères buf$ = string$(12*72," ") WriteStringToBinaryFile(nom$,buf$)
' boucle pour la création des 12 enregistrements for i%=1 to 12 ' la variable i% est la zone 1 ' on construit la zone 2 v = i%*3 + 0.17 ' et la zone 3 s$ = left$(str$(v)+string$(60," "),60) ' on écrit l'enregistrement à sa place p% = (i%-1)*72 + 1 : ' calculer la position de début ' d'abord, écrire la zone 1: ReplaceBlockInBinaryFile(nom$,adr(i%),4,p%,0) ' puis, écrire la zone 2: ReplaceBlockInBinaryFile(nom$,adr(v),8,p%+4,0) ' enfin, écrire la zone 3: ReplaceBlockInBinaryFile(nom$,adr(s$),60,p%+12,1) next i%
end
lire: if numeric(text$(11))=0 message "Invalide." return end_if num% = val(text$(11)) if num%<1 or num%>12 message "Invalide." return end_if p% = (num%-1)*72 + 1 : ' calculer la position de début clear 13 item_add 13,"Enregistrement "+str$(num%) ' d'abord lire la zone 1 i% = 0 ReadBlockFromBinaryFile(nom$,adr(i%),4,p%) item_add 13,"Zone 1: "+str$(i%) ' puis, lire la zone 2: ReadBlockFromBinaryFile(nom$,adr(v),8,p%+4) item_add 13,"zone 2: "+str$(v) ' enfin, lire la zone 3: ReadBlockFromBinaryFileToString(nom$,60,p%+12) item_add 13,"Zone 3: ["+ReadBlockFromBinaryFileToString$+"]" return
#INCLUDE "KGF_SUB.bas"
Je pense qu'avec cette palette de fonctions pour la gestion de fichiers binaires, on peut réellement faire des choses intéressantes. | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile Mer 27 Fév 2013 - 13:49 | |
| Merci Klaus En attendant que Jack l'implémente dans Panoramic, les fichiers de données sont donc déjà exploitables avec ta DLL. | |
|
Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile Mer 27 Fév 2013 - 14:03 | |
| Ze top !!!
Je crois que j'ai tout ce qu'il faut
Encore merci à tous en général, et à klaus en particulier... les fichiers binaires n'ont plus qu'à bien se tenir ! | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile Mer 27 Fév 2013 - 14:39 | |
| Merci pour votre intérêt !
Ceci est un "premier jet". Ce n'est pas encore vraiment performant en termes de vitesse. Je me suis attaché à la fonctionnalité. Si ces fonctions rencontrent un intérêt durable, je pourrai les optimiser considérablement, en terme de vitesse d'exécution. | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile Mer 27 Fév 2013 - 16:12 | |
| Il faudra voir selon ce que Jack a prévu. S'il a mis ces fonctions dans ses priorités, elles seront peut-être rapidement natives dans Panoramic. En tout cas en attendant, c'est fonctionnel. | |
|
Contenu sponsorisé
| Sujet: Re: 1.96 du 27 Février 2013: ajout ReadBlockFromBinaryFile | |
| |
|