
Listes Chainées
Re: Listes Chainées
Et le PHP est un langage à part entière, qui ne ressemble pas tant que ça à un BASIC. Il a des fonctions très puissantes de gestion des chaînes de caractère, dont les tableaux associatifs, qui sont maintenant dans pure sous le nom de maps; c'est pour ça que j'étais si content de cette nouvelle! 
Comme CPL le dit, les tableaux occupent un espace mémoire linéaire, où l'on voit la différence avec le PHP : Purebasic est bien plus proche de la machine, il est fait pour la vitesse et l'utilisation à un niveau plus bas, plus proche de l'OS. Heureusement il a quand même beaucoup de fonctions de haut niveau qui nous facilitent la vie

Comme CPL le dit, les tableaux occupent un espace mémoire linéaire, où l'on voit la différence avec le PHP : Purebasic est bien plus proche de la machine, il est fait pour la vitesse et l'utilisation à un niveau plus bas, plus proche de l'OS. Heureusement il a quand même beaucoup de fonctions de haut niveau qui nous facilitent la vie

Re: Listes Chainées
A propos de ma question sur la sauvegarde des listes chainées, un modérateur d'un forum allemand m'a envoyé le code suivant. Je l'ai traduit avec son autorisation et selon mes possibilités.
Il serait profitable que quelqu'un de compétant corrige éventuellement ma traduction. (emplois de mauvais termes etc...)
Code:
Il serait profitable que quelqu'un de compétant corrige éventuellement ma traduction. (emplois de mauvais termes etc...)
Code:
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
langa68
PB V4.31
Qui gardera les gardes?
PB V4.31
Qui gardera les gardes?
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Listes Chainées
Bon, je réponds pas à ta question, mais quand tu postes un code, mets le entre les balises
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
Re: Listes Chainées
Ca me semble bon. J'ai modifié les comms pour que tu comprennes mieux
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
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Listes Chainées
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.
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86