Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Cagou-77
Messages : 79 Inscription : dim. 15/août/2004 13:27
Message
par Cagou-77 » sam. 21/mai/2005 6:18
Bonjours à Tous
Peut-on dupliquer une liste chainée basée sur une structure si oui
comment faire ?
et peut-on transferer un/des éléments d'une liste à l'autre en sachant quelle sont basée sur la même structure
Code : Tout sélectionner
Exemple :
Structure TableArticles
ID.l
IDArticles.l
Design.s
Cond_Ha.l
Unite_Ha.s
Valeur.f
Remise.s
Stock.l
PrixNetHt.f
PrixVente.f
Entree.l
MontantHt.f
EndStructure
NewList LstArticle.TableArticles()
je ne parle pas de
NewList LstArticle2.TableArticles() ; là je duplique la structure de la liste
je parle de LstArticle2 = LstArticle() ; dupliquer la structure et les éléments
quelle contient .
Merci d'avance pour les réponses
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » sam. 21/mai/2005 14:12
avec copymemory ce doit etre faisable...
Dri
Anonyme2
Messages : 3518 Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans
Message
par Anonyme2 » sam. 21/mai/2005 15:32
Rien de bien compliqué, une boucle avec la 1ere liste chainée et tu ajoutes à chaque tour de boucle un élément à la seconde liste, ensuite tu copies les valeurs de chaque élément de la 1ere liste chaînée dans la seconde
J'ai mis aussi à la fin une boucle pour afficher chaque élément de chaque liste sur la même ligne
Voici un code d'exemple avec ta structure
Code : Tout sélectionner
Structure TableArticles
ID.l
IDArticles.l
Design.s
Cond_Ha.l
Unite_Ha.s
Valeur.f
Remise.s
Stock.l
PrixNetHt.f
PrixVente.f
Entree.l
MontantHt.f
EndStructure
NewList LstArticle.TableArticles()
For i = 1 To 5 ; 5 éléments pour LstArticle() pour les essais
AddElement(LstArticle())
LstArticle()\ID = i
LstArticle()\IDArticles = i * Random(5500)
LstArticle()\Design = Str(i * Random(300))
LstArticle()\Cond_Ha = i * 5
LstArticle()\Unite_Ha = Str(i * 17)
LstArticle()\Valeur = i * 270.8
LstArticle()\Remise = StrF(i*1.5)
LstArticle()\Stock = Random(15000)
LstArticle()\MontantHt = i *500
LstArticle()\PrixNetHt = LstArticle()\MontantHt * 1.186
LstArticle()\PrixVente = LstArticle()\PrixNetHt * 1.25
Next
NewList LstArticle2.TableArticles()
; on vide la liste chaîné LstArticle2() si besoin
; (si on effectue l'opération plusieurs fois)
ClearList(LstArticle2())
ForEach LstArticle()
AddElement(LstArticle2())
LstArticle2()\ID = LstArticle()\ID
LstArticle2()\IDArticles = LstArticle()\IDArticles
LstArticle2()\Design = LstArticle()\Design
LstArticle2()\Cond_Ha = LstArticle()\Cond_Ha
LstArticle2()\Unite_Ha = LstArticle()\Unite_Ha
LstArticle2()\Valeur = LstArticle()\Valeur
LstArticle2()\Remise = LstArticle()\Remise
LstArticle2()\Stock = LstArticle()\Stock
LstArticle2()\MontantHt = LstArticle()\MontantHt
LstArticle2()\PrixNetHt = LstArticle()\PrixNetHt
LstArticle2()\PrixVente = LstArticle()\PrixVente
Next
; on se positionne au début de la liste pour pouvoir afficher
; LstArticle2() en même temps que LstArticle()
ResetList(LstArticle2())
ForEach LstArticle()
NextElement(LstArticle2())
Debug "Article " +Str(ListIndex(LstArticle()))
Debug "LstArticle() LstArticle2()"
Debug "--------------------------------------"
Debug Str(LstArticle()\ID) + " " + Str(LstArticle2()\ID)
Debug LstArticle()\Design + " " + LstArticle2()\Design
Debug Str(LstArticle()\Cond_Ha) + " " + Str(LstArticle2()\Cond_Ha)
Debug LstArticle()\Unite_Ha + " " + LstArticle2()\Unite_Ha
Debug StrF(LstArticle()\Valeur) + " " + StrF(LstArticle2()\Valeur)
Debug LstArticle()\Remise + " " + LstArticle2()\Remise
Debug Str(LstArticle()\Stock) + " " + Str(LstArticle2()\Stock)
Debug StrF(LstArticle()\MontantHt) + " " + StrF(LstArticle2()\MontantHt)
Debug StrF(LstArticle()\PrixNetHt) + " " + StrF(LstArticle2()\PrixNetHt)
Debug StrF(LstArticle()\PrixVente) + " " + StrF(LstArticle2()\PrixVente)
Debug " "
Debug " "
Next
nico
Messages : 3702 Inscription : ven. 13/févr./2004 0:57
Message
par nico » sam. 21/mai/2005 16:50
@Dr Dri,
Ayant moi même eu l'erreur de le croire, ce n'est pas possible avec copymemory si la structure contient des chaines car tes deux listes feront référence à la même chaine car on copiera seulement l'adresse.
Oliv
Messages : 2117 Inscription : mer. 21/janv./2004 18:39
Message
par Oliv » sam. 21/mai/2005 17:23
nico a écrit : @Dr Dri,
Ayant moi même eu l'erreur de le croire, ce n'est pas possible avec copymemory si la structure contient des chaines car tes deux listes feront référence à la même chaine car on copiera seulement l'adresse.
J'ai essayé aussi et je me suis fait avoir
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » sam. 21/mai/2005 19:33
ah oué, je n'ai pas pensé aux champs "pointeurs"
du coup les chaines ne sont pas dupliquées...
Dri