Page 1 sur 1

[R] Tableau multidimensionnel

Posté : lun. 18 août 2008 01:51
par supermeganono
Bonjour,

J'ai appris la programmation en réaliser mes sites web ( jeux online par formulaire et automatisé par php et mysql ). Je début dans Autoit3 et j'aurai aimer stocker des données dans un tableau multidimensionnel comme je le faisais avec php.
Dans php j'avais quelque chose comme :

Code : Tout sélectionner

$tableau[$compteur][$Posx][$Posy] = "information";
Les contenu de mes tableaux sont toujours généré par des fonctions, tout comme le $x et $y ( qui reste positif avec en général 2.000 en valeur maximum )

Dans Autoit après avoir lu pas mal de post et réponse j'obtient ceci pour tester :

Code : Tout sélectionner

Global $Ttab1[100]
Global $Ttab2[2000]
Global $Ttab3[2000]
Dim $pos[3] = [$Ttab1,$Ttab2,$Ttab3]
J'espérer donc pouvoir enregistrer 100 lignes de coordonnées $x et $y mais lorsque je fais un test aleatoire comme :

Code : Tout sélectionner

$pos[0][750][500] = "info1";
$pos[1][1000][1000] = "info2";
 
j'obtient : Array variable has incorrect number of subscripts or subscript dimension range exceeded.
ou encore un message me disant que je dépasse la taille maximal autorisé.


Apparement, je me plante sérieusement dans la déclaration et gestion de mes tableaux. Et malgré la documentation je n'arrive pas à gérer correctement ce genre de tableau. Quelqu'un pourrait-il m'expliquer svp ou me fournir un quelconque exemple svp ?


Merci bien.

Re: [..] Tableau multidimensionnel

Posté : lun. 18 août 2008 11:59
par Tlem
En fait, vous devez déclarer votre tableau comme ceci :

Code : Tout sélectionner

Dim $pos[100][2000][2000]

Re: [..] Tableau multidimensionnel

Posté : lun. 18 août 2008 12:08
par jbnh
Pour la taille max, pas de panique :
When creating arrays you are limited to up to 64 dimensions and/or a total of 16 million elements.

Re: [..] Tableau multidimensionnel

Posté : lun. 18 août 2008 13:40
par tolf
...et ici le tableau fait 100x2000x2000 = 400 millions de cases ?!
C'est peut-être un peu trop non :lol:

Re: [..] Tableau multidimensionnel

Posté : lun. 18 août 2008 18:58
par supermeganono
...et ici le tableau fait 100x2000x2000 = 400 millions de cases ?!
C'est peut-être un peu trop non :lol:
Le truc c'est que non, voila le tableau ne fera jamais plus de 100 enregistrements dans l'exemple !
un exemple :

$pos[0][768][37]
$pos[1][327][1988]
$pos[2][1078][1678]
ect...
$pos[100][1534][369]

Donc ici mon tableau n'aura réellement que 100 informations ! Par contre je vois que dans autoit3, apparemment il génère le tableau dans son intégralité vide pour le remplir après.
Hors moi je ne rempli pas le tableau ! Je me sert du tableau pour stocker des informations dans le resultat ( = "info" ) mais aussi dans les index pour les positions !

Je travail sur l'axe x et y pour les position comme en géométrie, restant coté positif. Les index comme l'info contenu me servent pour mes programmes. Je sais c'est peut etre tordu pour stocker des infos, mais j'adore cette méthode.

Ainsi si j'interroge ma 2e information enregistré, je me sers de l'index pour savoir ou aller la chercher, tout le reste n'est qu'information que j'utilise. Je sais donc que sur mon graphique, l'info 2 se trouve au point x=1078 et y=1678 tout en contenant l'information que j'aurais trouver utile d'y associer ( chaine de caractère le plus souvent ).


Le truc c'est que j'ai besoin de pouvoir rechercher dans une liste 3 informations utile, pouvoir les modifier, les effacer ou les supprimer. J'avais aussi penser abandonner ces tableaux pour simplement créer une chaine de caractère genre :

Code : Tout sélectionner

Dim $pos[500]
$pos[0] = "x_y_resultat"
; Soit $pos[0] = "768_37_(valeur inexistante)"
 
Et de travailler cette chaine de caractère comme je le faisais dans php avec la fonction Split() permettant de scinder la chaine de caractère via un operateur ( _ ici dans notre exemple ) pour récupérer les différents résultats sous forme de tableau.

Mais après pas mal de recherche sur la documentation, j'ai pas encore trouver le moyen de faire ca.
Si vous savez m'aider sur ca, ca serai énorme ;) Ne serait-ce qu'un lien vers les fonctions, je testerai et me démmerderai :)

Merci !

Re: [R] Tableau multidimensionnel

Posté : lun. 18 août 2008 20:44
par supermeganono
Ne vous embêtez plus, je viens de trouver Stringsplit() qui va me permettre de tester tout ca !

Re: [R] Tableau multidimensionnel

Posté : lun. 18 août 2008 21:04
par Tlem
C'est ce que je voulais vous proposer avant d'aller manger. ;)
Mais madame à appeler avant que je ne fasse le post. :lol:

Voici un exemple de son utilisation :

Code : Tout sélectionner

#Include <array.au3>

Dim $pos[100]

$pos[1] = "750|500|info1"
$pos[2] = "1000|1000|info2"

$aDatas = StringSplit($pos[1],"|")
_ArrayDisplay($aDatas,"Datas")

$aDatas = StringSplit($pos[2],"|")
_ArrayDisplay($aDatas,"Datas")

Re: [R] Tableau multidimensionnel

Posté : mar. 19 août 2008 20:28
par supermeganono
J'ai tester pas mal de chose sur ton script pour comprendre mieux la fonction _ArrayDisplay() et l'include ( #Include <array.au3> ).

Par contre après avoir rechercher je n'ai trouver l'explication de _ArrayDisplay() qu'en anglais, et je ne trouve pas dans la doc francaise ( ici ). Existe il une page comprenant l'explication des includes nécessaire lors de l'utilisation de certaine fonctions et la liste des fonctions concerner comme _ArrayDisplay() ( un peu comme les fonction ici )


En tout cas merci pour vos réponses, je test des tas de trucs débile et inutile mais ca me permet d'apprendre le langage que je trouve franchement sympa ^^ Surtout quand on est qu'amateur de programmation ;)

Re: [R] Tableau multidimensionnel

Posté : mer. 20 août 2008 00:43
par SagePourpre
supermeganono a écrit : Existe il une page comprenant l'explication des includes nécessaire lors de l'utilisation de certaine fonctions et la liste des fonctions concerner comme _ArrayDisplay()

Je ne sais pas pour la documentation française ( je ne l'ai jamais lu ) mais si tu tapes le nom d'une fonction dans l'index de l'aide d'autoit, tu as la description et s'il y'a un include à mettre, il est dans la boîte jaune juste avant la fonction.

Re: [R] Tableau multidimensionnel

Posté : mer. 20 août 2008 01:46
par Tlem
supermeganono a écrit :Par contre après avoir rechercher je n'ai trouver l'explication de _ArrayDisplay() qu'en anglais, et je ne trouve pas dans la doc francaise
La documentation est en cours de traduction, et nous ne sommes pas nombreux à s'être attelé à cette tache.
Actuellement, pour ma part j'ai du mal à trouver le temps de continuer. Mais de temps en temps je fait un truc par-ci un truc par-là. :roll:

En ce qui concerne les includes, plusieurs solutions :
- Dans Scite deux clics sur la fonction que vous avez tapez pour la mettre en surbrillance puis F1 pour afficher l'aide de la fonction (En Anglais pour le moment). En général, comme l'a dit SagePourpre, vous trouverez dans le cadre jaune la première ligne qui indique l'include à rajouter.
Ceci est valable pour les fonctions externes, mais pour les fonctions internes il est souvent nécessaire de rajouter un include pour les constantes et là il n'y à pas d'indication sauf dans l'exemple qui lui est associé en fin de l'aide.

- Deux autres solutions ici : http://www.autoitscript.fr/forum/viewto ... =21&t=1000

Re: [R] Tableau multidimensionnel

Posté : mer. 20 août 2008 22:18
par supermeganono
Ok merci bien à vous.
Bon courage pour la traduction, c'est un boulot très apprécié surtout par ceux qui ont du mal avec l'anglais comme moi :lol: