Page 1 sur 1

Structure dynamique

Publié : lun. 23/mars/2009 11:37
par Ulix
Bonjour a tous !

Bien que je n'écrive pas souvent, je m'astreins tous les jours à vous lire (le forum français, avec beaucoup de plaisir :lol: )
et même de temps a les buveurs de thé !


Mais aujourd'hui, j'ai besoin de vos lumières. Ma question :
Est-il possible de gérer une structure de façon dynamique.
Attention je parle de la structure elle-même, de ses éléments !

PureBasic ne permet que de la déclarée, tel qu'elle ! Point barre. Exemple :

Code : Tout sélectionner

Structure Divers
Element1.l
Element2.s
EndStructure
Comment (r)ajouté un nouveau élément : Element3.s par exemple.
La nouvelle structure aurait donc cet aspect !

Code : Tout sélectionner

Structure Divers
Element1.l
Element2.s
Element3.s
EndStructure
Puisque PureBasic ne le permet pas quelqu'un s'est-il penché sur ce problème ?

Peut-on imaginé un jeu d'instruction du genre :
StructureCreate("NomStructure, Element1.s, Element2.s"), pour la crée de façon dynamique ?
Et pour (r)ajouter un élément : StructureAdd("NomStructure", "Element3.s", Position d'insertion dans Structure)
Et pour supprimer un élément : StructureDelete("NomStructure", Position dans Structure)
Pour tous supprimer : StructureClear("NomStructure")
Voir même renommer un élément.
Enfin pourquoi ne pas imaginé la possibilité de faire une moulinette pour convertir tous les données contenus
dans une structure en une autre dans la cas d'une structure lié a une liste chaîné ???
Mais là je rêve.


J'ai fais des recherche sur les deux forums, j'ai vaguement trouvé des postes qui évoqué semble t-il les
structures (ou lors représentation en mémoire) sans fournir de solution (une solution que je puise comprendre),
bref, je n'ai pas tous compris, je suis probablement a coté de la plaque ! :oops:

Quelques liens avec comme arguments de recherche les termes "structure dynamique" :


http://www.purebasic.fr/english/viewtop ... re+dynamic
http://www.purebasic.fr/english/viewtop ... re+dynamic
http://www.purebasic.fr/english/viewtop ... re+dynamic
http://www.purebasic.fr/english/viewtop ... re+dynamic


Une idée intéressante aussi, lire et enregistrer une structure :

http://www.purebasic.fr/english/viewtop ... re+dynamic


Je crois que quelqu'un (Dr. Dri) chercher un projet pour son retour, en voilà peu être un ?
En attendant, quelqu'un a t-il une solution, peut-être avec des macros, une solution a ma porté ?


A apparemment c'est possible en C :

http://www.autoitscript.com/autoit3/doc ... Create.htm


Dans se post :

http://www.purebasic.fr/english/viewtop ... re+dynamic

J'ai cru comprendre, (je cite d'après Google traduction):

"Une structure ne doit exister que lors de la compilation. Il a rien de plus d'un descriptif type de décalage....
à l'exécution, la structure elle-même n'existe plus, mais seulement les décalages. "

Ce "décalage" des données (je suppose ?) est-il modifiable ?
Peut-on supprimer des données, ou en insérer par simple décalage ?
Cela a t-il déjà était fait ? Quelqu'un a t-il un exemple !

Et dans ce post :

http://www.purebasic.fr/english/viewtop ... re+dynamic

Il est "apparemment" (pas sûr d'avoir tout compris) évoque la façon dont les données sont en mémoire,
et le fait qu'il est possible (je cite Google traduction) "d' "enregistrer un tableau de structures sur le disque
dur est très pratique en utilisant cette méthode"
Quelle méthode ? Pas trop compris (les pointeurs)? :oops:

Ce post, parle de copie et d'échange des éléments d'une Structure

http://www.purebasic.fr/english/viewtop ... highlight=

Y a de l'assembleur, ce qui n'est plus tout de mon niveau !
Y aurait-il plus simple pour comprendre comment les structures sont gérées ?
De plus comment conceptualiser les "décalages" c'est à dire la suppression et ajout d'un élément
d'une structure ?

Bref, je suis a la ramasse ! :oops:

Je suis ouvert à toutes sujétion…
Merci de m'avoir lu ! :lol:

Publié : lun. 23/mars/2009 21:01
par Ollivier
Si tu n'es pas exigeant en performance, c'est jouable.

Publié : mar. 24/mars/2009 0:58
par GeBonet
Bonsoir,

Je ne sais pas si je vais répondre à ta question, mais en tout cas, me permettre de réfléchir tout haut et me rappeler que :

Une Structure écrite telle qu'elle est ici, pour moi c'est une "bloc" de donnée lié par un "nom" et des "sous" noms ayant des caractéristiques qui peuvent-être différentes" et je reprend celle que tu as utilisée...

Code : Tout sélectionner

Structure Divers
      Element1.l
      Element2.s
      Element3.s  
EndStructure
Cela occupe la place mémoire de la description d'ou seront rangé les données, puis les données elle même... Si je me reporte à une forme semblable mais qui elle était dynamique c'est la description d'un Buffer d'écriture d'un fichier à accès direct en basic ou d'autres langage...
Mais dynamiquement je pouvais déclarer mon buffer avec un tableau...

Avec pour chaque indice dans la table n(i)= la taille de donnée NomChamp$(i) qui suit
Et j'aurais même pu ajouté type(i) pour désigner le type de donnée (entier, long, chaine etc...) auquel cas la boucle ci dessous aurait été un peu différente.

Code : Tout sélectionner

Tot=0
For i=1 to NombreChamps 
    Field #Buffer, Tot as Tampon$, n(i) as NomChamp$(i)
    Tot=Tot+n(i)   ; ce qui ici provoquait le décalage du tampon pour le suivant
next i
Ceci était une forme de structure "dynamique" puisque paramétrable de l'extérieur une fois compilé...

Et cette forme est aussi réalisable ici en écrivant directement en mémoire grâce à AllocateMemory(Taille) et en utilisant le même procédé...
On à n(i) qui sont des valeurs variables et dans NomChamp$(i) des descripteurs variable aussi... Ou plus simplement garder les tableaux...

Le seul problème c'est que ces tableaux(n) ils doivent être sauvegardé en dehors du programme, c'est à dire sur disque...
Et que forcément sous cette forme ils ne sont pas très "lisibles" puisque les libellés et les valeurs sont contenu dans les variable et sur disque. :?
Mais bon... Je ne suis pas un grand spécialiste de PB... Alors il existe peut-être d'autres solutions...???
Bonne chance :lol: :lol: :lol:

Publié : mar. 24/mars/2009 9:44
par Backup
la structure :

Code : Tout sélectionner


Structure Divers
      Element1.l
      Element2.s
      Element3.s 
EndStructure 
peut etre vu de la sorte :
(a lancer en mode Debug pour comprendre :) )


Code : Tout sélectionner

element1=10
element2.s="toto"
element3.s="riri"

diver.s=Str(element1)+","+element2.s+","+element3.s 

Debug  "notre structure: " + diver.s ; <<<<<<<<<< contenu de notre structure
Debug ""
; recuperation de nos valeurs dans la structure

For x=1 To CountString(diver.s, ",")+1
    Debug "element "+Str(x)+" de notre structure "+ StringField(diver.s,x,",")
Next x
; ************************************



:)


et voici le meme exemple en structure multidimension :
(4 dimensions pour l'exemple)

de plus je ne change que legerement le contenu des champs ;)

Code : Tout sélectionner

element1=10
element2.s="toto"
element3.s="riri"



Dim diver.s (3)

For i=0 To 3
diver.s(i)=Str(element1+i)+","+element2.s+Chr(Random(200)+33)+","+element3.s+ Chr(Random(200)+33)
Next i


Debug  "notre structure: " + diver.s ; <<<<<<<<<< contenu de notre structure
Debug ""
; recuperation de nos valeurs dans la structure

For y=0 To 3
For x=1 To CountString(diver.s(y), ",")+1
    Debug "element "+Str(x)+" de notre structure "+ StringField(diver.s(y),x,",")
Next x
Debug ""
Next y
; ************************************



Publié : mar. 24/mars/2009 10:45
par GeBonet
Exactement...
Et avec l'avantage c'est que l'on peut dire qu'elle est une "structure"
non seulement dynamique puisque non "figé" dans le code...
Mais en plus à longueur variable puisque n'ayant pas l'obligation pour chaque donnée
d'avoir sa taille ou son type définis (seulement des séparateurs). :lol: :lol:

La seule contrainte et là c'est comme dans le cas du Buffer précité...
Il faut bien avoir conscience du contenu... Et rendre les tableaux parlant !

Puisque de "Champs Question (1)" à "(n)" pourrait-être "> donnez votre nom : ", "Prénom etc..."
Tandis que nous aurions alors "Champ Réponse (1)", a "(n)" qui serait les données à proprement parlé.
Étant entendu que le descripteur ici "Champs Question (i)" serait par exemple sauvé en tête de fichier
et toutes les réponses "Champ Réponse (j,i)" à la suite... avec j= nombre de lignes et i=nombre de "question"...

On a donc ainsi un fichier qui aurait en première ligne la description de son contenu !
Suivit des "x" lignes de données rangées selon cette description...
Et dans le corps du programme :
- La methode de lire la description (structure)
- Puis celle de lire les données selon la description...

Et voilà, un ensemble dynamique qui en réalité existe depuis bien longtemps et qui est applicable ici aussi... :lol: :lol: :lol:

Publié : mar. 24/mars/2009 11:42
par Backup
:)

Publié : mar. 24/mars/2009 11:46
par Ulix
Merci a vous tous !

Vous m'avez permis de mieux comprendre comment abordé les structures. :lol:

Je vais regardé de plus près tous vos codes, les essayés.

Peut-être arriverais-je a tous comprendre, et a les exploités.

En tous cas merci beaucoup pour tous vos commentaires ! :lol:

PS : Si quelqu'un a d'autres idées où du code, n'hésitez pas a posté, je suis toujours preneur, ça permet de mieux comprendre. Merci !