une structure dans une liste

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

une structure dans une liste

Message par lepiaf31 »

salut je n'arrive pas a mettre une structure dans une liste:

Code : Tout sélectionner

Structure Fichier
  Name.s
  Type.c
  Size.f
EndStructure

a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19

NewList Liste.Fichier()

AddElement(Liste())
Liste() = a
j'ai une erreure: "can't assign a value to a structure"
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

il faut faire membres à membres :

Code : Tout sélectionner

Structure Fichier
  Name.s
  Type.c
  Size.f
EndStructure

NewList Liste.Fichier()

AddElement(Liste())
Liste()\Name = "test"
Liste()\Type = 1
Liste()\Size = 19
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

Ou pour copier a rapidement dans l'élément courant de la liste (ça peut etre chiant de tout faire membre à membre) :

Code : Tout sélectionner

Structure Fichier
  Name.s
  Type.c
  Size.f
EndStructure

a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19

NewList Liste.Fichier()

AddElement(Liste())
CopyMemory(@a, Liste(), SizeOf(Fichier))

Debug Liste()\Name
Debug Liste()\Type
Debug Liste()\Size
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Gratteur a écrit :Ou pour copier a rapidement dans l'élément courant de la liste (ça peut etre chiant de tout faire membre à membre) :

Code : Tout sélectionner

Structure Fichier
  Name.s
  Type.c
  Size.f
EndStructure

a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19

NewList Liste.Fichier()

AddElement(Liste())
CopyMemory(@a, Liste(), SizeOf(Fichier))

Debug Liste()\Name
Debug Liste()\Type
Debug Liste()\Size
Étant donnée la chaîne de caractère (champs Name) un CopyMemory() va simplement copier le pointeur de la chaîne et non le data de la chaîne.

J'ai pas de code de démonstration mais je sais par expérience que les modifications faites dans la variable 'a' aura le même effet sur l'élément courant de la 'Liste()' au moment de l'appel de la commande CopyMemory(). Je ne suis pas sûr mais si la variable a est local dans une procédure je pense que le champ Name dans la liste deviendra null.

Le code de minirop est le meilleur moyen pour initialiser l'élément d'une liste chaînée.

A+
Guimauve
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Exemple pour passer le contenu de plusieurs strings dans une listicon en les classant dans l'ordre en passant par une structure. (extrait d'un de mes codes sans détails)

Code : Tout sélectionner

;-structure htaccess
Structure ht_access
  NomAcc.s            
  AdresseAcc.s 
  TelAcc.s
  EmailAcc.s
  RepAcc.s
  FileAcc.s 
  IdAcc.s 
  PassAcc.s
EndStructure 
Global NewList ItemsAc.ht_access()

;-clearlist
Procedure.b item_clearAc() 
  ClearList(ItemsAc()) 
  ProcedureReturn 1 
EndProcedure

Procedure.b AddItem_Access()
  If AddElement(ItemsAc()) 
    ItemsAc()\NomAcc    = GetGadgetText(#String_NomAcc)  
    ItemsAc()\TelAcc    = GetGadgetText(#String_TelAcc)
    ItemsAc()\AdresseAcc= GetGadgetText(#String_AdresseAcc)
    ItemsAc()\EmailAcc  = GetGadgetText(#String_EmailAcc)
    ItemsAc()\RepAcc    = GetGadgetText(#String_RepAcc)
    ItemsAc()\FileAcc   = GetGadgetText(#String_FileAcc)
    ItemsAc()\IdAcc     = GetGadgetText(#String_IdAcc) 
    ItemsAc()\PassAcc   = GetGadgetText(#String_PassAcc)
    AddGadgetItem(#ListIcon_Acc, -1,ItemsAc()\NomAcc +Chr(10)+ ItemsAc()\TelAcc +Chr(10)+ItemsAc()\AdresseAcc +Chr(10)+ ItemsAc()\EmailAcc +Chr(10)+ ItemsAc()\RepAcc +Chr(10)+ItemsAc()\FileAcc+Chr(10)+ItemsAc()\IdAcc+Chr(10)+ItemsAc()\PassAcc) 
  EndIf 
  ProcedureReturn 1  
EndProcedure 
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre