Fichiers à accès direct

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Fichiers à accès direct

Message par MLD »

Bonsoir a tous
Pour des raisons de compatibilité avec des programmes en VB6, et sur de gros fichiers. :mrgreen:
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. :lol:
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.) 8O
Si quelqu'un a une idée d'user.lib je suis prenneur. :lol:
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