Array() pour remplir un tableau

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Array() pour remplir un tableau

Message par Thyphoon »

A moins d'avoir vraiment raté quelques choses je ne crois pas actuellement on puisse le faire avec Purebasic. Mais ça pourrait être intéressant de pouvoir charger simplement un tableau avec une commande style array
Exemple

Code : Tout sélectionner

Dim MonTableau.l(4)
MonTableau()= array(1,2,3,4);
ou encore

Code : Tout sélectionner

Dim MonTableau.s(4)
MonTableau()= array("Martin","Paul","Jacques","Pierre");
ou encore mieux

Code : Tout sélectionner

Dim MonTableau.s(4)
txt.s="martin|paul|jacques|Pierre")
MonTableau()=ArrayField(txt,"|")
Qu'en pensez vous
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Oui ca serait cool.
Car on peut les faire soit même ses fonctions, mais c'est relou à toujours à avoir à recoder ces quelques lignes...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

j'ai déjà essayer et j'ai pas réussi, quand je veux renvoyer une liste, çà renvoie que le dernier élément.
çà marche que si on la passe en paramètre.

sinon, y'a une technique pour avoir un nombre variable de paramètres ? (comme le ... en C)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Array() pour remplir un tableau

Message par Backup »

Thyphoon a écrit :A moins d'avoir vraiment raté quelques choses je ne crois pas actuellement on puisse le faire avec Purebasic. Mais ça pourrait être intéressant de pouvoir charger simplement un tableau avec une commande style array
Exemple

Code : Tout sélectionner

Dim MonTableau.l(4)
MonTableau()= array(1,2,3,4);
ou encore

Code : Tout sélectionner

Dim MonTableau.s(4)
MonTableau()= array("Martin","Paul","Jacques","Pierre");
ou encore mieux

Code : Tout sélectionner

Dim MonTableau.s(4)
txt.s="martin|paul|jacques|Pierre")
MonTableau()=ArrayField(txt,"|")
Qu'en pensez vous


comme ça par exemple :lol:


Global Dim a$(8 )
For k=1 To 7
    a$(k)= StringField ( "Je suis une chaîne contenant des champs" , k, " " )
Next

For b=1 To 7
     Debug a$(b)
Next b



Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Array() pour remplir un tableau

Message par Thyphoon »

Dobro a écrit :[



comme ça par exemple :lol:


Global Dim a$(8 )
For k=1 To 7
a$(k)= StringField ( "Je suis une chaîne contenant des champs" , k, " " )
Next

For b=1 To 7
Debug a$(b)
Next b



Et bien oui c'est déjà ce que je fais ...mais pour des tableau d'entier c'est pas pratique, surtout quand les chiffre qu'on veut mettre dedans ce sont des constantes...
Je me sers se constante pour la fabrication de menu dans mon jeu
exemple

Code : Tout sélectionner

Dim menu..l(10)
Enumeration
#Menu_Ouvrir
#Menu_fermer
#Menu_souder
#Menu_Examiner
Endenumeration

Select Objet
  case #Porte
    Menu()={#Menu_Ouvrir,#Menu_Fermer,#Menu_souder,#Menu_Examiner}
  case #titoire
 Menu()={#Menu_Ouvrir,#Menu_Fermer}
 case #sol
 Menu()={#Menu_Examiner}
etc...

Endselect
On pourrait le fair ça serait super pratique !
et pour afficher mon menu et bien
j'affiche text(#Menu_Ouvrir)
ce qui me permet de faire du multilangue

je sais si je suis tres claire :p
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Array() pour remplir un tableau

Message par Backup »

Thyphoon a écrit : Je me sers se constante pour la fabrication de menu dans mon jeu
utilise des variables et puis c'est tout :D !

au lieu de "#Menu_Ouvrir " , tu ecris , "Menu_Ouvrir#" et voila ! :D

les constantes sont utilisés souvent a tord et a travers ! :D

souvent cela "Fige" le programme car les constantes sont par définition Figé
donc pas de possibilités, d'adaptation du code en cas de changement ...

je prefere de loin utiliser des variables, qui me laisse faire ce que je veux :D
sans etre coincé !! :D

(sauf pour les cas ou l'on sait que cela ne changera pas ex :"#PI " )

La mode des constantes a tout bout de champs, n'est pas bonne !
a mon avis :D
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Array() pour remplir un tableau

Message par Thyphoon »

Dobro a écrit : utilise des variables et puis c'est tout :D !

au lieu de "#Menu_Ouvrir " , tu ecris , "Menu_Ouvrir#" et voila ! :D

les constantes sont utilisés souvent a tord et a travers ! :D

souvent cela "Fige" le programme car les constantes sont par définition Figé
donc pas de possibilités, d'adaptation du code en cas de changement ...

je prefere de loin utiliser des variables, qui me laisse faire ce que je veux :D
sans etre coincé !! :D

(sauf pour les cas ou l'on sait que cela ne changera pas ex :"#PI " )

La mode des constantes a tout bout de champs, n'est pas bonne !
a mon avis :D
là je suis pas entierrement d'accord avec toi. Les constantes servent pour ce qui ne bouge pas. Or lorsque je fais un menu il y a un grand nombre de possibilité qui ne bouge pas et sont fixe et ça s'implifie énormement tout
En retour de mon menu
je peux faire un

Code : Tout sélectionner

select retourmenu
 case #Menu_Ouvrir
 case #Menu_Fermer
 etc...
Endselect
pour afficher mon menu pour chaque ligne il me suffit d'un Drawtext(x,y,Text(#Menu_Ouvrir))
C'est quand même plus simple que de créer une variable pour chaque possibilité du menu sans compté que le temps de comparer une chaine de caractère par rapport a un entier est quand même important
Sans compter que dans le code c'est parlant et que c'est tres simple a rajouter une nouvelle possibilité :P
En tout cas de toute les tests et experience que j'ai fait dessus cette semaine j'ai pas trouvé mieux !!! Mais je reste ouvert ;)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Avec une macro ça devrait être possible pour un nombre limité de données mais rien n'empêche d'écrire plusieurs fois la fonction.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

une idée a creuser peut etre :D


  ; Array by Dobro


  Declare array(par$)
CallDebugger
Global Dim MonTableau(5)



MonTableau(0)=array( "1,2,3,4" ) ; attention :monTableau va de 1 a 5 !!!


For b=1 To 5
     Debug MonTableau(b)
Next b




Procedure array(par$)
    nb= CountString (par$, "," )+1
     For i=1 To nb
        p=p+4
         PokeL (MonTableau()+p, Val ( StringField ( par$, i, "," ) ))
     Next i
EndProcedure



sinon Flype avait fait ça :

Code : Tout sélectionner

Dim tableau.c(26)

PokeS(@tableau(0), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26)

For i = 0 To 25
  Debug Chr(tableau(i))
Next 

:D
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Voici un exemple qui exploite directement les chaînes en mémoire, l'affectation des données est instantanée :)

Code : Tout sélectionner

Structure TString
	String.s{10}[$7FFFFFFF]
EndStructure

*MonTableau.TString = ?MonTableau
DataSection
	MonTableau:
	Data.s "ENZO     ","AUDREY   ","MOHAMED  ","AURELIE  ","QUENTIN  ","MANON    ","JULIEN   ","JADE     ","LUCAS    ","LEA      ","ETHAN    "
	Data.s "CHLOE    ","THOMAS   ","EMMA     ","NATHAN   ","CAROLINE ","NICOLAS  ","CAMILLE  ","ALEXANDRE","MARIE    ","THEO     ","PAULINE  "
	Data.s "HUGO     ","SARAH    ","YANIS    ","LILOU    ","RAYAN    ","JULIE    ","ANTOINE  ","MELISSA  ","ROMAIN   ","INES     ","XAVIER   ","FANNY    "
	Data.s "SACHA    ","LOLA     ","LOUIS    ","ABIGAIL  ","OLIVIER  ","CLARA    ","RAPHAEL  ","MATHILDE ","TOM      ","SABRINA  ","MAXIME   "
	Data.s "LAURA    ","BENJAMIN ","ALEXIA   ","CLEMENT  ","OCEANE   ","JULES    ","AMBRE    ","PIERRE   ","AMANDINE ","AXEL     ","ANAIS    "
	Data.s "MAXENCE  ","SOPHIE   ","MAEL     ","MARGAUX  ","GABRIEL  ","EMILIE   ","GUILLAUME","CORALIE  ","EVAN     ","URSULE   ","MALIKA   "
	Data.s "SEBASTIEN","OPHELIE  ","ARTHUR   ","ELODIE   ","KEVIN    ","CELIA    ","MATHIEU  ","LOUISE   ","NOAH     ","ALINE    ","DAVID    "
	Data.s "LENA     ","LEO      ","CHARLOTTE","MATHIS   ","CELINE   ","PAUL     ","NOEMIE   ","FLORIAN  ","EMELINE  ","TRISTAN  ","LOUNA    "
	Data.s "SIMON    ","GAETANE  ","MATTHIEU ","SOLENE   ","VINCENT  ","ALICE    ","CEDRIC   ","LUCIE    ","TIMEO    ","MARION   ","ESTEBAN  "
EndDataSection

For i = 0 To 99
  Debug *MonTableau\String[i]
Next
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Tres bon ce code !

Le seul Hic c'est que j'ai besoin de creer des tableaux a la volé et donc le contenu n'est pas fixe. Donc difficile d'utiliser les Datas... Mais ça me donne une idée...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Thyphoon a écrit :Tres bon ce code !

Le seul Hic c'est que j'ai besoin de creer des tableaux a la volé et donc le contenu n'est pas fixe. Donc difficile d'utiliser les Datas... Mais ça me donne une idée...
les listes chainées sont faites pour ça non ? 8O
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Thyphoon a écrit :Tres bon ce code !

Le seul Hic c'est que j'ai besoin de creer des tableaux a la volé et donc le contenu n'est pas fixe. Donc difficile d'utiliser les Datas... Mais ça me donne une idée...
Mais si tes possibilités de tableaux sont réduits, tu peux tout de même utiliser se principe en créant un tableau assez grand pour stocker tout tes cas. Puis tu change le pointeur du tableau vers la bonne zone qd tu le veux...

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Petite précision, les données ne sont pas figées. Tu peux changer les données à la volée, pas contre les chaines sont limitées à 9 caractères dans cet exemple.

Code : Tout sélectionner

Structure TString
	String.s{10}[$7FFFFFFF]
EndStructure

*MonTableau.TString = ?MonTableau
DataSection
	MonTableau:
	!rb 20
	Data.s "Thyphoon "
	!rb 60
	Data.s "Fin      "
EndDataSection

*MonTableau\String[5] = "Eric"

For i = 0 To 9
  Debug *MonTableau\String[i]
Next
L'instruction rb permet de réserver de la mémoire.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

erix14 a écrit :Voici un exemple qui exploite directement les chaînes en mémoire, l'affectation des données est instantanée :)

Code : Tout sélectionner

Structure TString
	String.s{10}[$7FFFFFFF]
EndStructure

*MonTableau.TString = ?MonTableau
DataSection
	MonTableau:
	Data.s "ENZO     ","AUDREY   ","MOHAMED  ","AURELIE  ","QUENTIN  ","MANON    ","JULIEN   ","JADE     ","LUCAS    ","LEA      ","ETHAN    "
	Data.s "CHLOE    ","THOMAS   ","EMMA     ","NATHAN   ","CAROLINE ","NICOLAS  ","CAMILLE  ","ALEXANDRE","MARIE    ","THEO     ","PAULINE  "
	Data.s "HUGO     ","SARAH    ","YANIS    ","LILOU    ","RAYAN    ","JULIE    ","ANTOINE  ","MELISSA  ","ROMAIN   ","INES     ","XAVIER   ","FANNY    "
	Data.s "SACHA    ","LOLA     ","LOUIS    ","ABIGAIL  ","OLIVIER  ","CLARA    ","RAPHAEL  ","MATHILDE ","TOM      ","SABRINA  ","MAXIME   "
	Data.s "LAURA    ","BENJAMIN ","ALEXIA   ","CLEMENT  ","OCEANE   ","JULES    ","AMBRE    ","PIERRE   ","AMANDINE ","AXEL     ","ANAIS    "
	Data.s "MAXENCE  ","SOPHIE   ","MAEL     ","MARGAUX  ","GABRIEL  ","EMILIE   ","GUILLAUME","CORALIE  ","EVAN     ","URSULE   ","MALIKA   "
	Data.s "SEBASTIEN","OPHELIE  ","ARTHUR   ","ELODIE   ","KEVIN    ","CELIA    ","MATHIEU  ","LOUISE   ","NOAH     ","ALINE    ","DAVID    "
	Data.s "LENA     ","LEO      ","CHARLOTTE","MATHIS   ","CELINE   ","PAUL     ","NOEMIE   ","FLORIAN  ","EMELINE  ","TRISTAN  ","LOUNA    "
	Data.s "SIMON    ","GAETANE  ","MATTHIEU ","SOLENE   ","VINCENT  ","ALICE    ","CEDRIC   ","LUCIE    ","TIMEO    ","MARION   ","ESTEBAN  "
EndDataSection

For i = 0 To 99
  Debug *MonTableau\String[i]
Next
C'est vrai que cette façon de faire est pratique, je l'utilise aussi souvent.
Ceci dit, en principe, il vaut mieux écrire String.s{10}[0] plutot que String.s{10}[$7FFFFFFF], enfin je pense.
Répondre