Aide sur les listes chainée

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

Aide sur les listes chainée

Message par Cagou-77 »

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 »

avec copymemory ce doit etre faisable...

Dri
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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 »

@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 »

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 »

ah oué, je n'ai pas pensé aux champs "pointeurs"
du coup les chaines ne sont pas dupliquées...

Dri :0:
Répondre