Page 4 sur 4

Re: Listes Chainées

Publié : jeu. 15/oct./2009 17:19
par Anonyme
les tableaux sont contiguë en mémoire , pas les liste chainée :wink:

Re: Listes Chainées

Publié : jeu. 15/oct./2009 17:43
par djes
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! :D

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

Publié : jeu. 15/oct./2009 17:58
par Backup
ha ! ok ok! :)

Re: Listes Chainées

Publié : ven. 16/oct./2009 13:40
par langa68
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:

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

Re: Listes Chainées

Publié : ven. 16/oct./2009 13:58
par TazNormand
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

Publié : ven. 16/oct./2009 14:31
par langa68
Merci pour l'info, je ne savais pas

Re: Listes Chainées

Publié : ven. 16/oct./2009 14:38
par djes
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

Re: Listes Chainées

Publié : sam. 17/oct./2009 13:46
par beauregard
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.
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 !