Ecrire et lire les entités d'une liste chainée par bloc

Partagez votre expérience de PureBasic avec les autres utilisateurs.
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Ecrire et lire les entités d'une liste chainée par bloc

Message par PAPIPP »

- Voici ma petite contribution à ce forum
Je ne sais pas si cela a déjà été mentionné mais il est pénible d’écrire dans un fichier toutes les entités d’une liste chainée les une après les autres.
-Je propose ici d’écrire et de relire une liste chainée par bloc ou enregistrement
Précautions :
La structure de la liste peut être complexe exemple :
- Structure Struct
- String${15}
- Number.l
- NOM.s{20}
- Salaire.D[12]
- EndStructure
Les Chaines de caractères doivent impérativement être définies fixes ex : l.s{20}

Code : Tout sélectionner

Structure Struct
  String${15}
  Number.l
  NOM.s{20}
  salaire.d[12]
  
EndStructure
;  **************les chaines de caractéres doivent impérativement être en fixe l.s{xx}   ***************

NewList List.Struct()

AddElement(List())
List()\String$ = LSet("Bidule 1", 15)
List()\Number = 259
List()\Nom = LSet("Dupond  pierre", 20)

For i=0 To 11
List()\salaire[i] = 2598.10+i
Next

AddElement(List())
List()\String$ = "Truc 2"
List()\Number = -33
List()\Nom = "Martin du Gard"
  For i=0 To 11
   List()\salaire[i] = 3598.10+i
  Next

AddElement(List())
List()\String$ = "Machin 3"
List()\Number = -255
List()\Nom = "Beaumarchais"
  For i=0 To 11
    List()\salaire[i] = 4598.10+i
  Next

ResetList(List())
ForEach List()
  Debug " ******************* nouvelle entité ***************************"
  Debug List()\String$
  Debug List()\Number
  Debug list()\nom
    For j=0 To 11
     Debug StrD(list()\salaire[j],2)
    Next
Next

;***************  ecriture en bloc ************************

If OpenFile(1, "c:\test.bin")
  ForEach List()
    WriteData(1, list(), sizeof(struct))
  Next
  CloseFile(1)
EndIf


;****************fin d'écriture en bloc ***********************

ClearList(List())

If OpenFile(1, "c:\test.bin")
      While Not Eof(1)
      AddElement(List())
      ReadData(1,list(),sizeof(struct))
     Wend
    CloseFile(1)
EndIf

Debug "********  lecture de la liste chainee par bloc **********"
ForEach List()
  Debug " ******************* nouvelle entité ***************************"
  Debug List()\String$
  Debug List()\Number
  Debug list()\nom
    For j=0 To 11
     Debug StrD(list()\salaire[j],2)
    Next
Next

et ici le prg de lecture ***************************

Code : Tout sélectionner

; *********** PRG de lecture du fichier de la liste chainée enregistréé par bloc ****
Structure Struct
  String${15}
  Number.l
  NOM.s{20}
  Salaire.D[12]
EndStructure
;  **************les chaines de caractéres doivent impérativement être en fixe l.s{xx}   ***************
NewList List.Struct()
;*****************************************************

ClearList(List())

If OpenFile(1, "c:\test.bin")
   While Not Eof(1)
    AddElement(List())
    ReadData(1,list(),sizeof(struct))
  Wend
  CloseFile(1)
EndIf

Debug "********  lecture de la liste chainée par bloc **********"
ForEach List()
  Debug " ******************* nouvelle entité ***************************"
  Debug List()\String$
  Debug List()\Number
  Debug list()\nom
    For j=0 To 11
     Debug StrD(list()\salaire[j],2)
    Next
Next