Listes Chainées

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Re: Listes Chainées

Message par Anonyme »

les tableaux sont contiguë en mémoire , pas les liste chainée :wink:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Listes Chainées

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Listes Chainées

Message par Backup »

ha ! ok ok! :)
Avatar de l’utilisateur
langa68
Messages : 56
Inscription : dim. 29/avr./2007 16:03

Re: Listes Chainées

Message 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
langa68
PB V4.31
Qui gardera les gardes?
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Listes Chainées

Message 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
Image
Image
Avatar de l’utilisateur
langa68
Messages : 56
Inscription : dim. 29/avr./2007 16:03

Re: Listes Chainées

Message par langa68 »

Merci pour l'info, je ne savais pas
langa68
PB V4.31
Qui gardera les gardes?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Listes Chainées

Message 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
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Listes Chainées

Message 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 !
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Répondre