Re: Listes Chainées
Publié : jeu. 15/oct./2009 17:19
les tableaux sont contiguë en mémoire , pas les liste chainée 

Code : Tout sélectionner
; Code écrit par Hroudtwolf -> voir original sous
; http://purebasic-lounge.com/viewtopic.php?p=60115#60115
; et traduit en français avec son aimable autorisation par langa68
; Préparation du fichier Contact
Structure tContact
sNom .s {32} ; Limité à 32 signes.
sPrenom .s {32}
sTelephone .s {32}
EndStructure
Procedure.i contactBook_Save (List dataList.tContact (), sFilename.s)
;List dataList.tContact () indique le nom du fichier dans la liste chainée
;sFilename décrit le nom du fichier sous lequel il doit être sauvegardé
Protected idFile.i
; Ouvre le fichier à sauvegarder
idFile = CreateFile (#PB_Any, sFilename)
If Not (idFile)
; le fichier n'a pas pu être créé
; donc on quitte la procédure avec #False
ProcedureReturn #False
EndIf
; Liste iterieren.
ForEach dataList ()
; Sauvegarder le fichier
; Le fichier aura la taille de tContact
; donc nous renvoyons la taille en octets par SizeOf
WriteData (idFile, dataList (), SizeOf (tContact))
;idFile = nom du fichier à sauvegarder
;dataList = nom du fichier de la liste chainée
Next
CloseFile (idFile)
ProcedureReturn #True
EndProcedure
Procedure.i contactBook_Load (List dataList.tContact (), sFilename.s)
Protected idFile.i
; Ouvre le fichier à lire
idFile = ReadFile (#PB_Any, sFilename)
If Not (idFile)
; Le fichier n'ö pas pu être ouvert
; donc on quitte la procédure avec #False
ProcedureReturn #False
EndIf
; Vider la liste
ClearList (dataList ())
;Les données du fichier sont transmises chaque fois vers un nouvel élément de la liste
While Not (Eof (idFile))
AddElement (dataList ())
ReadData (idFile, dataList (), SizeOf (tContact))
Wend
CloseFile (idFile)
ProcedureReturn #True
EndProcedure
NewList contactBook.tContact ()
; Premier contact
AddElement (contactBook ())
contactBook ()\sNom = "Pierre"
contactBook ()\sPrenom = "Dupont"
contactBook ()\sTelephone = "0146337889"
; deuxième contact
AddElement (contactBook ())
contactBook ()\sNom = "Jacques"
contactBook ()\sPrenom = "Meppiel"
contactBook ()\sTelephone = "0392377519"
; Troisième contact
AddElement (contactBook ())
contactBook ()\sNom = "François"
contactBook ()\sPrenom = "daniel"
contactBook ()\sTelephone = "0212345679"
; Sauvegarder le données
contactBook_Save (contactBook (), "contactbook.sav")
; Effacer la liste
; Seullement pour la forme car la prochaine fonction le fera d'elle même
ClearList (contactBook ())
; Charger le fichier
If (contactBook_Load (contactBook (), "contactbook.sav"))
ForEach contactBook ()
Debug "Contact:"
Debug contactBook ()\sNom
Debug contactBook ()\sPrenom
Debug contactBook ()\sTelephone
Debug "--------------------------------"
Next
EndIf
Code : Tout sélectionner
et [/code ]
tu devrais trouver le bouton CODE dans la fenêtre à côté des boutons [b]B[/b] [i]i[/i] u Quote
ça donne des messages un peu plus lisibles, surtout pour copier-coller ton code dans PureBasic
Code : Tout sélectionner
; Code écrit par Hroudtwolf -> voir original sous
; http://purebasic-lounge.com/viewtopic.php?p=60115#60115
; et traduit en français avec son aimable autorisation par langa68
; Préparation du fichier Contact
Structure tContact
sNom .s {32} ; Limité à 32 signes.
sPrenom .s {32}
sTelephone .s {32}
EndStructure
Procedure.i contactBook_Save (List dataList.tContact (), sFilename.s)
;List dataList.tContact () indique le nom de la liste chainée
;sFilename décrit le nom du fichier sous lequel il doit être sauvegardé
Protected idFile.i
; Ouvre le fichier à sauvegarder
idFile = CreateFile (#PB_Any, sFilename)
If Not (idFile)
; le fichier n'a pas pu être créé
; donc on quitte la procédure et on envoie #False pour signaler l'erreur
ProcedureReturn #False
EndIf
; Itération de la Liste
ForEach dataList ()
; Sauvegarde du fichier
; Le fichier aura la taille de tContact*le nb d'enregistrements
; nous récupérons la taille en octets par SizeOf
WriteData (idFile, dataList (), SizeOf (tContact))
;idFile = nom du fichier à sauvegarder
;dataList = nom de la liste chainée
Next
CloseFile (idFile)
ProcedureReturn #True
EndProcedure
Procedure.i contactBook_Load (List dataList.tContact (), sFilename.s)
Protected idFile.i
; Ouvre le fichier à lire
idFile = ReadFile (#PB_Any, sFilename)
If Not (idFile)
; Le fichier n'a pas pu être ouvert
; donc on quitte la procédure et on envoie #False pour signaler l'erreur
ProcedureReturn #False
EndIf
; Vide la liste
ClearList (dataList ())
;On lit les données du fichier et on crée chaque fois un nouvel élément de la liste
While Not (Eof (idFile))
AddElement (dataList ())
ReadData (idFile, dataList (), SizeOf (tContact))
Wend
CloseFile (idFile)
ProcedureReturn #True
EndProcedure
NewList contactBook.tContact ()
; Premier contact
AddElement (contactBook ())
contactBook ()\sNom = "Pierre"
contactBook ()\sPrenom = "Dupont"
contactBook ()\sTelephone = "0146337889"
; deuxième contact
AddElement (contactBook ())
contactBook ()\sNom = "Jacques"
contactBook ()\sPrenom = "Meppiel"
contactBook ()\sTelephone = "0392377519"
; Troisième contact
AddElement (contactBook ())
contactBook ()\sNom = "François"
contactBook ()\sPrenom = "daniel"
contactBook ()\sTelephone = "0212345679"
; Sauvegarde le données
contactBook_Save (contactBook (), "contactbook.sav")
; Effacer la liste
; Seulement pour la forme car la prochaine fonction le fera d'elle même
ClearList (contactBook ())
; Charger le fichier
If (contactBook_Load (contactBook (), "contactbook.sav"))
ForEach contactBook ()
Debug "Contact:"
Debug contactBook ()\sNom
Debug contactBook ()\sPrenom
Debug contactBook ()\sTelephone
Debug "--------------------------------"
Next
EndIf
bonne idée, j'avais proposé un truc similaire, comme quoi. Mais le mieux c'est comme dans la vrai vie, pour éviter la tentation de chourer un truc, il faut un vigile vigilant: il faut un programmeur à plein temps veillant tout les jours, et s'il voit une version suspecte, hop !TazNormand a écrit :A ce propos, Fred, n'aurais-tu pas moyen de marquer les éxécutables de PB, histoire de traquer les versions pirates.