Manipuler une map par son adresse

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Manipuler une map par son adresse

Message par Torp »

Hello tout le monde,

je voudrais savoir s'il est possible de une map structurée à partir de son adresse.
L'exemple ci-après n'a aucun sens car on pourrait passer la Map en paramètre de la procédure, mais c'est juste pour expliquer le truc...

Code : Tout sélectionner

Structure Valeurs
	Valeur.i
	txt.s
EndStructure

Structure Test
	Type.b
	Val.Valeurs
EndStructure

NewMap MyMap1.Test()
NewMap MyMap2.Test()

AddMapElement(MyMap1(), "Map1")
MyMap1()\Type = 1
MyMap1()\Val\txt  = "qqchose"
MyMap1()\Val\Valeur = 5

AddMapElement(MyMap2(), "Map2")
MyMap2()\Type = 2
MyMap2()\Val\txt  = "autre"
MyMap2()\Val\Valeur = 7

Procedure Traitement(Type.b)
	Shared MyMap1(), MyMap2()
	NewMap *pt.Test()
	
	Select Type
		Case 1
			*pt = @MyMap1()
		Case 2
			*pt = @MyMap2()
	EndSelect
	
	; Traitement
	ForEach *pt()
		Debug *pt()\Val\Valeur
	Next
EndProcedure

Traitement(MyMap1()\Type)
Le seul moyen que j'ai trouvé est d'encapsuler la map dans une structure, mais c'est lourdingue...

Code : Tout sélectionner

Structure Valeurs
	Valeur.i
	txt.s
EndStructure

Structure Test
	Type.b
	Val.Valeurs
EndStructure

Structure MaMap
	Map MyMap.Test()
EndStructure

Define M1.MaMap
Define M2.MaMap

AddMapElement(M1\MyMap(), "Map1")
M1\MyMap()\Type = 1
M1\MyMap()\Val\txt  = "qqchose"
M1\MyMap()\Val\Valeur = 5

AddMapElement(M2\MyMap(), "Map2")
M2\MyMap()\Type = 2
M2\MyMap()\Val\txt  = "autre"
M2\MyMap()\Val\Valeur = 7

Procedure Traitement(Type.b)
	Shared M1, M2
	*pt.MaMap
	
	Select Type
		Case 1
			*pt = @M1
		Case 2
			*pt = @M2
	EndSelect
	
	; Traitement
	ForEach *pt\MyMap()
		Debug *pt\MyMap()\Val\txt
	Next
EndProcedure

Traitement(M1\MyMap()\Type)
Merci

il est vraiment en mousse cet exemple...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Manipuler une map par son adresse

Message par falsam »

Je crains fort que ce soit le seul moyen.

Ton premier code ne fonctionne pas car ton pointeur ne pointe pas sur une map mais sur un élément dans une map en cours de lecture. N'ayant pas amorcer cette lecture, tu n'auras pas de résultat.

En fonction de ce que j'ai dit voila ton premier code modifié

Code : Tout sélectionner

Structure Valeurs
   Valeur.i
   txt.s
EndStructure

Structure Test
   Type.b
   Val.Valeurs
EndStructure

Global NewMap MyMap1.Test()
Global NewMap MyMap2.Test()

AddMapElement(MyMap1(), "Map1")
MyMap1()\Type = 1
MyMap1()\Val\txt  = "qqchose"
MyMap1()\Val\Valeur = 5

AddMapElement(MyMap2(), "Map2")
MyMap2()\Type = 2
MyMap2()\Val\txt  = "autre"
MyMap2()\Val\Valeur = 7

Procedure Traitement(Type.b)
   ;Shared MyMap1(), MyMap2()
   Protected *pt.Test
   
   Select Type
      Case 1
         *pt = @MyMap1()
      Case 2
         *pt = @MyMap2()
   EndSelect
   
   ; Traitement
   ;ForEach *pt()
    Debug *pt\Type
   ;Next
EndProcedure

Traitement(MyMap1()\Type)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: Manipuler une map par son adresse

Message par Torp »

Merci Falsam, Décidément sur tous les fronts :)
Je savais cela (j'avais dis que mon exemple n'était pas génial), mais j'ai tenté histoire de m'enlever le doute et d'essayer de trouver une solution là où il n'y en a à priori pas ;)
Répondre