Page 1 sur 1
[Func] Fonction, array2D, Input, Output, savoir-faire
Posté : mer. 12 sept. 2012 04:11
par martinbrait
à toutes fins utiles, j'ai mis trop longtemps avant de connaître
Code : Tout sélectionner
Func test2()
;retourner un tableau à plusieurs dimensions
$iRowCnt=50
$iColCnt=100
Local $avRET[$iRowCnt + 1][$iColCnt + 1] ;RAPPEL, je peux transformer dynamiquement les dimensions via ReDim
$avRET[0][0] = $iRowCnt
$avRET[0][1] = $iColCnt
; Read data to array
For $r = 1 To $iRowCnt
For $c = 1 To $iColCnt
$avRET[$r][$c] = Random()
Next
Next
;Return data
Return $avRET
EndFunc
_ArrayDisplay(test2(),"LE TABLEAU 2 DIMENSIONS")
Re: [Func] Fonction et array2D pour les nuls
Posté : mer. 12 sept. 2012 09:19
par TommyDDR
Je dis Non !
Pour une déclaration de variable dans une fonction, utilisez Local, pour une déclaration hors fonction, utilisez Global.
Vous n'aurez, normalement pas besoin de déclarer un Global dans une fonction (cela peut poser des problèmes d'accès).
De plus, bannissez le "Dim", l'aide AutoIt vous le dit elle même.
Aide a écrit :The difference between Dim, Local and Global is the scope in which they are created:
Dim = Local scope if the variable name doesn't already exist globally (in which case it reuses the global variable!)
Global = Forces creation of the variable in the Global scope
Local = Forces creation of the variable in the Local/Function scope
You should use Local or Global, instead of Dim, to explicitly state which scope is desired for a variable/constant/array.
Re: [Func] Fonction et array2D pour les nuls
Posté : mer. 12 sept. 2012 12:11
par martinbrait
Merci beaucoup pour cette mise au point.
Correction
Dim $avRET[$iRowCnt + 1][$iColCnt + 1]
devenu
Local $avRET[$iRowCnt + 1][$iColCnt + 1]
apportée dans le script indiqué plus haut.
Re: [Func] Fonction et array2D pour les nuls
Posté : mer. 12 sept. 2012 12:22
par TommyDDR
De rien

Mais une question s'impose, pourquoi avoir poster cette fonction ? Quelle est son utilité ? les post tagué [Func] contiennent des fonctions générales qui peuvent servir pour des script.
Re: [Func] Fonction et array2D pour les nuls
Posté : mer. 12 sept. 2012 12:38
par martinbrait
Quand on débute, il est très important de faire le tour de tous les types de format qui peuvent être manipulés via les fonctions,
afin de créer ses composants.
En effet, j'ai beaucoup lu, à tort et à travers dans les forums autoit, que les tableaux à plusieurs dimensions étaient
rigoureusement inemployables, et j'ai découvert le contraire récemment.

Je manipulais quotidiennement mes informations tabulaires dans des strings+(split,explode)
En débutant, je n'avais jamais osé décortiqué les fonctions stockées dans le dossier include, jusqu'à ce jour.
EN SORTIE DE FONCTION:
Je me demande également si les objets peuvent être directement renvoyés par les fonctions,
ou si il faut en fait
déclarer les objets en variable handle de portée globale
pour les manipuler via diverses fonctions.(exemple souhaité)
EN ENTREE DE FONCTION:
Exemple de question que je me pose encore aujourd'hui, je me demande si à l'entrée des fonctions autoit,
on peut admettre une variable de type tableau multidimensionnel, en entrée.(exemple souhaité)
Un grand merci pour votre disponibilité et votre gentillesse!
Re: [Func] Fonction et array2D pour les nuls
Posté : mer. 12 sept. 2012 12:39
par Uranium
Moi je trouve ça utile car débutant je ne comprenais rien sur l'utilisation des arrays ( quand et comment ) donc sa peut aider des nouveaux je pense
Mais il aurait plus ça place dans Exemple.
Pourquoi pas en dire un peu plus aussi ? Genre qu'un tableau de taille [6] commence en [0] et finit maximum en [5] ( La partie que j'ai eu le plus de mal à assimiler )
Re: [Func] Fonction, array2D, Input, Output, savoir-faire
Posté : mer. 12 sept. 2012 12:49
par martinbrait
Bonjour Uranium,
Pour retrouver facilement des dossiers dans une armoire,
on attribue à chacun une référence numérique unique.
On ouvre un dossier par numéro:
On les classe habituellement dans l'ordre numérique croissant.
Les numéros de chaque dossiers se succèdent de 1 en 1.
Mémoriser les bornes naturelles d'un tableau,
c'est imaginer un classement de dossiers dans une armoire.
Dossier 0, Dossier 1, Dossier 2, Dossier 3, Dossier 4,
Dossier 5, Dossier 6, Dossier 7, Dossier 8, Dossier 9,
Dossier 10, Dossier 11 , Dossier 12 etc...
Ainsi, le zéro marque le passage à la dizaine supérieure.
Il faut initialement partir de zéro, dès le début du décompte.
Quand on passe les dizaines,il faut repartir de zéro.
La série en cours est alors une réplique de la série précédente, de 0 à 9, à une dizaine supérieure près.
Le 0 est le chiffre de base de chaque dizaine.
Dans mon armoire, je dispose mes dossiers, les 5 premiers de 0 à 4, les 5 suivants de 5 à 9 etc...
Une dizaine doit donc commencer par zéro et se terminer par neuf,
pour éviter, soit les doublons, soit les manques.
Re: [Func] Fonction, array2D, Input, Output, savoir-faire
Posté : mer. 12 sept. 2012 13:02
par martinbrait
Je dois également faire une remarque concernant le superavantage
d'utiliser la fonction vu plus haut dans les tableaux:
En testant l'exemple, on constate que
- la case 0 est toujours occupée par le décompte du nombre d'enregistrements du tableau
le premier enregistrement commence effectivement à 1.
Re: [Func] Fonction, array2D, Input, Output, savoir-faire
Posté : mer. 12 sept. 2012 14:13
par mikell
Petite optimisation possible (pour des raisons pratiques)
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
Global $tableau = test2(50, 100) ; pour utilisation ultérieure dans le script de l'array $tableau[51][101]
_ArrayDisplay($tableau, "LE TABLEAU 2 DIMENSIONS")
Func test2($iRowCnt, $iColCnt) ;retourner un tableau à 2 dimensions
Local $avRET[$iRowCnt + 1][$iColCnt + 1]
$avRET[0][0] = $iRowCnt
$avRET[0][1] = $iColCnt
For $r = 1 To $iRowCnt ; Read data to array
For $c = 1 To $iColCnt
$avRET[$r][$c] = Random()
Next
Next
Return $avRET ;Return data
EndFunc
Re: [Func] Fonction, array2D, Input, Output, savoir-faire
Posté : mer. 12 sept. 2012 16:51
par TommyDDR
martinbrait a écrit :En testant l'exemple, on constate que
- la case 0 est toujours occupée par le décompte du nombre d'enregistrements du tableau
le premier enregistrement commence effectivement à 1.
Cela n'est du qu'à l'utilisation que vous en faite, vous pouvez mettre ce que vous voulez en 0, mettre la taille du tableau n'est qu'un choix (Vous pouvez aussi avoir la taille du tableau par la commande Ubound : voir l'aide associée)