Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312 Inscription : jeu. 26/juil./2007 12:10
Message
par Octavius » sam. 05/juil./2008 16:54
Ce serait vraiment pratique de pouvoir organiser son code comme cela :
Code : Tout sélectionner
Structure Bidule
Tel.w
*Address
EndStructure
Structure Machin
Name$
Number.l
NewList List.Bidule()
EndStructure
NewList Maliste.Machin()
AddElement(Maliste())
Maliste()\Name$="Truc"
Maliste()\Number=040488
AddElement(Maliste()\List())
Maliste()\List()\Tel=6534
Maliste()\List()\Address=AllocateMemory(12)
AddElement(Maliste()\List())
Maliste()\List()\Tel=234
Maliste()\List()\Address=AllocateMemory(7)
...
...
Malheureusement ce n'est pas possible... Avez-vous déjà été confrontés à ce problème ? Je cherche à créer un système équivalent mais ce n'est pas simple. Avez-vous des suggestions de code ?
Backup
Messages : 14526 Inscription : lun. 26/avr./2004 0:40
Message
par Backup » sam. 05/juil./2008 17:50
pourquoi ça ne te vas pas ça ?
Code : Tout sélectionner
Structure machin
Name$
Number.l
Tel.l
*Address
EndStructure
NewList Maliste.machin()
CallDebugger
;-------- Add Elements and TestLists --------
;
AddElement(Maliste())
Maliste()\Name$="Truc"
Maliste()\Number=040488
Maliste()\Tel=6534
Maliste()\Address=AllocateMemory(12)
AddElement(Maliste())
Maliste()\Tel=234
Maliste()\Address=AllocateMemory(7)
comtois
Messages : 5186 Inscription : mer. 21/janv./2004 17:48
Contact :
Message
par comtois » dim. 06/juil./2008 10:12
faut les gérer soi même les listes dans les structures :
Je crois qu'il existe des codes à droite à gauche qui mettent tout ça en forme dans des procédures, mais bon ,là c'est un exemple :
Code : Tout sélectionner
Structure Bidule
Tel.w
*Address
*Suivant.Bidule
EndStructure
Structure Machin
Name$
Number.l
*List
EndStructure
NewList Maliste.Machin()
Define *Ptr.Bidule
AddElement(Maliste())
Maliste()\Name$="Truc"
Maliste()\Number=040488
Maliste()\List=AllocateMemory(SizeOf(Bidule))
*Ptr = Maliste()\List
*Ptr\Tel = 6534
*Ptr\Address=AllocateMemory(12)
*Ptr\Suivant=AllocateMemory(SizeOf(Bidule))
*Ptr = *Ptr\Suivant
*Ptr\Tel = 234
*Ptr\Address=AllocateMemory(7)
*Ptr\Suivant=#Null
ForEach Maliste()
Debug Maliste()\Name$
Debug Maliste()\Number
*Ptr=Maliste()\List
While *Ptr
Debug *Ptr\Tel
Debug MemorySize(*Ptr\Address)
*Ptr=*Ptr\Suivant
Wend
Next
Anonyme
Message
par Anonyme » dim. 06/juil./2008 11:29
la lib de Lionel_OM libVector2 le fait très bien.
Octavius
Messages : 312 Inscription : jeu. 26/juil./2007 12:10
Message
par Octavius » dim. 06/juil./2008 21:16
Merci pour tes explications comtois.
@ Cpl.Bator : Je ne trouve pas la lib dont tu parles, ni sur le forum ni sur google.
J'ai essayé de mettre au point des procédures toutes faites pour automatiser mes listes, mais c'est encore un peu compliqué pour moi...
Je cherche donc une lib, où mieux une lib ouverte où je peux voir le code avec ses commentaires, pour gérer ce genre de listes... Vous auriez des liens ? Même en anglais, je fais des progrès en ce moment
Anonyme
Message
par Anonyme » dim. 06/juil./2008 22:16
Octavius
Messages : 312 Inscription : jeu. 26/juil./2007 12:10
Message
par Octavius » mar. 15/juil./2008 15:05
Voici enfin le résultat de mon travail ! Evidemment c'est encore très tâtonnant comme code, auriez-vous des suggestions pour améliorer ça ?
Code : Tout sélectionner
;éléments d'une sous-liste chaînée
Structure Element
*Next.Element
*Previous.Element
EndStructure
;informations sur la sous-liste chaînée
Structure SubList
Size.l ;taille de la structure de la liste chaînée
Count.l ;nombre d'éléments
Index.b ;index de l'élément courant
*Current.Element ;adresse de l'élément courant
*First.Element ;adresse du premier élément
*Last.Element ;adresse du dernier élément
EndStructure
;sous-liste chaînée personnalisée
Structure Feature Extends Element
Name$
EndStructure
;liste principale
Structure List
Name$
*Features.SubList
EndStructure
;********************************************************************
;Nouvelle sous-liste chaînée (avec un premier élément)
Macro NewSubList(Address,Structure)
Address=AllocateMemory(SizeOf(SubList))
Address\Size=SizeOf(Structure)
Address\Count=0
Address\Index=-1
Address\Current=0
Address\First=0
Address\Last=0
EndMacro
;Ajout d'un nouvel élément à la sous-liste chaînée
Macro AddSubElement(Address)
Address\Index=Address\Count
Address\Count+1
Address\Current=AllocateMemory(Address\Size)
If Address\Index=0
Address\First=Address\Current
Else
Address\Last\Next=Address\Current
Address\Current\Previous=Address\Last
EndIf
Address\Last=Address\Current
EndMacro
;Accéder à l'élément courant
Macro SubElement(Address,Structure)
*SubElement.Structure=Address\Current
*SubElement
EndMacro
Macro ComSubElement(Address,Structure,Command)
*SubElement.Structure=Address\Current
Command *SubElement
EndMacro
;Renvoie le nombre d'éléments
Macro CountSubList(Address)
Address\Count
EndMacro
;Renvoie l'index de l'élément courant
Macro SubListIndex(Address)
Address\Index
EndMacro
;Sélection du premier élément
Macro FirstSubElement(Address)
Address\Index=0
Address\Current=Address\First
EndMacro
;Sélection de l'élément suivant
Macro NextSubElement(Address)
If Address\Current\Next
Address\Index+1
Address\Current=Address\Current\Next
EndIf
EndMacro
;Sélection de l'élément précédent
Macro PreviousSubElement(Address)
If Address\Current\Previous
Address\Index-1
Address\Current=Address\Current\Previous
EndIf
EndMacro
;********************************************************************
NewList List.List()
AddElement(List())
List()\Name$="Truc 0"
NewSubList(List()\Features,Feature) ;nouvelle sous-liste
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 0, sous-truc 0" ;valeur du nouvel élément
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 0, sous-truc 1" ;valeur du nouvel élément
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 0, sous-truc 2" ;valeur du nouvel élément
AddElement(List())
List()\Name$="Truc 1"
NewSubList(List()\Features,Feature) ;nouvelle sous-liste
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 1, sous-truc 0" ;valeur du nouvel élément
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 1, sous-truc 1" ;valeur du nouvel élément
AddSubElement(List()\Features) ;nouvel élément
SubElement(List()\Features,Feature)\Name$="Truc 1, sous-truc 2" ;valeur du nouvel élément
ForEach List()
Debug List()\Name$
FirstSubElement(List()\Features)
For i=0 To CountSubList(List()\Features)-1
ComSubElement(List()\Features,Feature,Debug)\Name$
NextSubElement(List()\Features)
Next i
Next