Fichiers à accès direct
Publié : jeu. 10/déc./2009 17:56
Bonsoir a tous
Pour des raisons de compatibilité avec des programmes en VB6, et sur de gros fichiers.
J'ai eu besoin de réaliser un système de fichiers à accès direct.
Je vous donne le code. Il ya certainement mieux, mais cela fonctionne.
Si certains ont une meilleur idée ? bienvenu au club.
Toutes vos critiques "constructives" seront acceptées. (Même si elles sont dures pour ma façon de programmer.)
Si quelqu'un a une idée d'user.lib je suis prenneur.
Merci a tous.Bonne soirée
Michel
Pour des raisons de compatibilité avec des programmes en VB6, et sur de gros fichiers.

J'ai eu besoin de réaliser un système de fichiers à accès direct.
Je vous donne le code. Il ya certainement mieux, mais cela fonctionne.

Si certains ont une meilleur idée ? bienvenu au club.
Toutes vos critiques "constructives" seront acceptées. (Même si elles sont dures pour ma façon de programmer.)

Si quelqu'un a une idée d'user.lib je suis prenneur.

Merci a tous.Bonne soirée
Michel
Code : Tout sélectionner
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
;¤¤¤ MLD le 10/12/2009 ¤¤¤
;¤¤¤ PB 4.40 ¤¤¤
;¤¤¤ fichiers a accés direct ¤¤¤
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
;Principe
;Pour enregistrer: indiquer le numéro d'enregistrement, que c'est un enregistrement, la variable d'enregistrement
; et une variable string de cette façon "variable"
;Pour lire: indiquer le numéro d'enregistrement, que c'est une lecture, la variable d'enregistrement ,
;et une variable vide ""
;Pour obtenir le nombre d'enregistrement : Appelez le procédure avec un numéro d'enregistrement quelconque, et
; toutes les autres variables vide ""
Structure Personne
Nom.w
Prenom.w
Age.w
EndStructure
Global Dim Personne.Personne(1)
Personne(1) \Nom.w = 20
Personne(1) \Prenom.w = 10
Personne(1) \Age.w = 5
Global Nbenr.l
Procedure.s fichierAD(Numenr.w,es.s,varenr.s,var.s)
longlig.w = (Personne(1)\Nom.w + Personne(1)\Prenom.w + Personne(1)\Age.w);longeur d'un enr
Posdepling.w = ((Numenr.w * longlig.w)- longlig.w);position de départ des enr
PosNom.w = Posdepling.w
PosPrenom.w = Posdepling.w + Personne(1)\Nom.w ;+1
PosAge.w = Posdepling.w + (Personne(1)\Nom.w + Personne(1)\Prenom.w); + 1
OpenFile(1,"ess.mld")
If Lof(1) =0
WriteString(1,Space(longlig.w))
Nbenr.l = Lof(1)/longlig.w
Else
Nbenr.l = Lof(1)/longlig.w
EndIf
CloseFile(1)
Select es.s
Case "enrg"
If Numenr.w = (Nbenr.l +1);Prépare les champs pour un nouveau enrg
OpenFile(1,"ess.mld")
FileSeek(1,Lof(1))
WriteString(1,Space(longlig.w))
Nbenr.l = Lof(1)/longlig.w
EndIf
If Numenr <= Nbenr.l ; évite un plantage
OpenFile(1,"ess.mld")
Select varenr
Case "Nom"
FileSeek(1,PosNom.w)
enrnom$ = var + Space(Personne(1)\Nom.w - Len(var)) ; comble le champ avec des espaces
WriteString(1,enrnom$)
Case "Prenom"
FileSeek(1,PosPrenom.w )
enrPrenom$ = var + Space(Personne(1)\Prenom.w - Len(var)) ; comble le champ avec des espaces
WriteString(1,enrPrenom$)
Case "Age"
FileSeek(1,PosAge.w)
enrAge$ = var + Space(Personne(1)\Age.w - Len(var)) ; comble le champ avec des espaces
WriteString(1, enrAge$)
EndSelect
CloseFile(1)
EndIf
Case "lect"
If Numenr <= Nbenr.l ; évite un plantage
OpenFile(1,"ess.mld")
Select varenr
Case "Nom"
FileSeek(1,PosNom.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Nom.w ))
Case "Prenom"
FileSeek(1,PosPrenom.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Prenom.w ))
Case "Age"
FileSeek(1,PosAge.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Age.w ))
CloseFile(1)
EndSelect
ProcedureReturn lect.s
EndIf
EndSelect
EndProcedure
For x=1 To 50
fichierAD(x,"enrg","Nom","Dugenet" +Str(x))
fichierAD(x,"enrg","Prenom","Marcel"+Str(x))
fichierAD(x,"enrg","Age",Str(x))
Next
;Pour lire le fichier enlevez les ;
fichierAD(1,"","",""); on appel le fichier pour avoir le nombre d'enregistrement
;maxenr.w = Nbenr.l
;For y =1 To maxenr.w Step 2
;Debug "Nom: " + fichierAD(y,"lect","Nom","")+ " " + "Prénom: " + fichierAD(y,"lect","Prenom","") + " " + "Age: " + fichierAD(y,"lect","Age","")
;Next
End