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
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
Code : Tout sélectionner
Code : Tout sélectionner
Code : Tout sélectionner