Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 1.99 ajout ReadBinaryFileRecord, WriteBinaryFileRecord Sam 2 Mar 2013 - 19:32 | |
| Nouvelle version: KGF.dll V1.99 du 2 mars 2013 J'ai frappé un grand coup: j'ai ajouté la notion d'enregistrement de longueur fixe, et les fonctions de lecture et écriture qui vont avec ! La doc est à jour ! KGF.dll: res% = dll_call4("ReadBinaryFileRecord",adr(nom$),adr(record$),nrec%,delta%) KGF_SUB.bas: ReadBinaryFileRecord(nom$,record$,nrec%)
KGF.dll: res% = dll_call4("WriteBinaryFileRecord",adr(nom$),adr(record$),nrec%,delta%) KGF_SUB.bas: WriteBinaryFileRecord(nom$,record$,nrec%)Modules modifiés: KGF.dll KGF_SUB.bas KGF_chm, KGF_doc, KGF_pdf Pour tester, il faut d'abord utiliser ce programme (juste un lancement, puis on l'arrête): - 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, sortie
dim i%, v, s$, buf$, n%, p%, num% dim nom$ : nom$ = "test_fichier_binaire.dat"
on_close 0,sortie
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")
OpenBinaryFile(nom$)
' 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: ReplaceBlockInBinaryFileByInteger(nom$,i%,p%,0) ' puis, écrire la zone 2: ReplaceBlockInBinaryFileByFloat(nom$,v,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 ReadBlockFromBinaryFileToInteger(nom$,p%) item_add 13,"Zone 1: "+str$(ReadBlockFromBinaryFileToInteger%) ' puis, lire la zone 2: ReadBlockFromBinaryFileToFloat(nom$,p%+4) item_add 13,"zone 2: "+str$(ReadBlockFromBinaryFileToFloat) ' enfin, lire la zone 3: ReadBlockFromBinaryFileToString(nom$,60,p%+12) item_add 13,"Zone 3: ["+ReadBlockFromBinaryFileToString$+"]" return
sortie: CloseBinaryFile(nom$) return
#INCLUDE "KGF_SUB.bas"
Ce programme crée un fichier binaire avec 12 enregistrements de longueur 72 caractères, composés chacun d'un entier, d'un flottant et d'une chaîne de caractères de 60 caractères de longueur. Puis, le programme de démo pour le mode "enregistrement": - Code:
-
' test_definition_record.bas
label lire, modifier
dim nfld%, fld1%, fld2, fld3$ dim res%, base%, nrec%, lu% dim nom$ : nom$ = "test_fichier_binaire.dat" fld3$ = string$(60," ")
KGF_initialize("KGF.dll")
define_record(3)
add_integer_field(adr(fld1%)) add_float_field(adr(fld2)) add_string_field(adr(fld3$),60)
build_record()
alpha 10 : top 10,10 : left 10,10 : caption 10,"Enregistrement:" edit 11 : top 11,10 : left 11,100 : width 11,40 : text 11,"0" button 12 : top 12,10 : left 12,160 : caption 12,"Lire" on_click 12,lire button 13 : top 13,10 : left 13,320 : caption 13,"Modifier" on_click 13,modifier
end
lire: nrec% = val(text$(11)) ReadBinaryFileRecord(nom$,record$,nrec%) message "lu: fld1%="+str$(fld1%)+" fld2="+str$(fld2)+" fld3$="+fld3$ lu% = 1 return modifier: if lu%=0 then return fld2 = 0 - fld2 fld3$ = left$(trim$(fld3$)+" bis"+string$(60," "),60) WriteBinaryFileRecord(nom$,record$,nrec%) message "écrit: fld1%="+str$(fld1%)+" fld2="+str$(fld2)+" fld3$="+fld3$ return
#INCLUDE "KGF_SUB.bas"
Ce programme utilise le fichier créé par le premier programme et permet de lire un enregistrement quelconque (entre 1 et 12). Un message affiche les zones lues. Une fois lu, un enregistrement peut être modifié par le bouton Modifier. On applique une modification simple (la zone flottante est inversée (0-valeur) et un "bis" est ajouté à la zone texte. En relisant le même numéro d'enregistremen par le bouton Lire, on peut vérifier la modification. Regardez bien la doc dans KGF.chm. Elle est très complète et fournit toutes les infos nécessaires. Sachez toute fois qu'il n'est pas nécessaire pour ces fonctions de disposer d'une chaîne de caractères regroupant tous les champs. La DLL accède, en lecture et en écriture, toute une liste de variables Panoramic, indépendamment de leur localisation ! On a un "enregistrement virtuel", en réalité ! | |
|