Page 1 sur 1

[R] Cherche Aide pour les array

Posté : mar. 19 août 2008 15:09
par DimVar
Bonjour à toutes et tous. (y a t'il des "toutes" ?)

Après avoir un peu flâné sur google et autres tuto, je ne trouve pas de compléments d'info sur les "array".
J'ai beau lire la doc (auto it) de long en large sur ce sujet, il y a encore des réponses que je ne trouve pas, ainsi qu'une logique que je n'arrive pas à assimiler.

Avant tout, est ce que je m'exprime dans un langage compréhensible ? (je suis nouveau dans le développement)
Je veux parler de ces variables définies avec des crochets, si pratiques pour récupérer plusieurs chaines.
J'ai à peu prés compris le fonctionnement, corrigez moi si je me trompe...

--------------------------------------------
Déclarer sa variable (array) suivi, entre crochet, du nombre de valeurs qu'elle peut contenir.

Ex : Dim $toto[5]

La variable $toto pourra donc contenir 5 "valeurs".

Pour appeler une de ses valeur, écrire la variable $toto suivi des crochets avec au sein de ceux-ci le numéro de la valeur souhaitée.


Ex : $toto[2]

Jusque ici, je suis.
La où ça se complique... Je tombe récemment sur un script où l'auteur utilise cette syntaxe :

Code : Tout sélectionner

Dim $toto[3]
$search = FileFindFirstFile ("c:\test\*.*")

For $temp = 0 To 2
    $toto[$temp] = FileFindNextFile ($search)
    If @error Then ExitLoop
Next
msgbox (0,"", $toto[1] & @crlf & $toto[2])

Alors là, je tombe de haut, car le script fonctionne, mais je ne comprends pas comment.
Quelle syntaxe dois je comprendre pour la déclaration (absente) de $temp ?
Comment se fait il que $temp soit positionnée dans les crochets de $toto (au sein de la boucle) ?

----------------------------------------------------------------
J'en viens donc à ma question principale, comment récupérer dans une "variable de type array"
le résultat d'un filefindnextfile, autrement qu'en utilisant cette syntaxe (celle de l'exemple) ?
N'hésitez pas à corriger les termes que j'ai utilisés entre "double quotes" si il ne sont pas explicite...

D'avance merci de votre patience pour la lecture de ce post ainsi que de l'aide que vous pourrez m'apporter.

Bien cordialement, Dimvar.


Ps : Si vous possédez un bon tutorial sur la definition, utlisation, l'emploi des "array"....

Re: [..]Cherche Aide pour les array

Posté : mar. 19 août 2008 15:51
par tolf
En fait ici, $temp est une variable tout à fait classique qui prend comme valeurs 0 puis 1 puis 2 (étant donné qu'elle est 'déclarée' dans un For...to...Next).
Donc imaginons que $temp = 0 , $toto[$temp] sera égal à $toto[0] (NB : la première case d'une array est toujours la case 0)
DimVar a écrit :J'en viens donc à ma question principale, comment récupérer dans une "variable de type array"
le résultat d'un filefindnextfile, autrement qu'en utilisant cette syntaxe (celle de l'exemple) ?
A priori la syntaxe de l'exemple est tout à fait appropriée si vous voulez avoir dans votre array les 3 premiers fichiers de "c:\test\".
Après, si vous voulez seulement mettre dans la case 1 le premier fichier trouvé du dossier "c:\test\", vous pouvez faire :

Code : Tout sélectionner

$toto[1] = FileFindNextFile ($search)
J'espère avoir été assez clair mais n'ésitez pas à demander d'autres explications si besoin.

Re: [..] Cherche Aide pour les array

Posté : mar. 19 août 2008 16:10
par Tlem
DimVar a écrit :Ex : Dim $toto[5]

La variable $toto pourra donc contenir 5 "valeurs".
En réalité dans cet exemple là, la variable $toto pourra contenir 6 "valeurs" (De $toto[0] à $toto[5])
DimVar a écrit :

Code : Tout sélectionner

Dim $toto[3]
$search = FileFindFirstFile ("c:\test\*.*")

For $temp = 0 To 2
    $toto[$temp] = FileFindNextFile ($search)
    If @error Then ExitLoop
Next
msgbox (0,"", $toto[1] & @crlf & $toto[2])

Alors là, je tombe de haut, car le script fonctionne, mais je ne comprends pas comment.
Quelle syntaxe dois je comprendre pour la déclaration (absente) de $temp ?
Comment se fait il que $temp soit positionnée dans les crochets de $toto (au sein de la boucle) ?
Dans cet exemple, la variable $temp est bien déclarée par la boucle FOR et elle va prendre successivement 3 valeurs (De 0 à 3).
Donc la variable $toto[$temp] correspondra aux différentes valeurs : $toto[0], $toto[1], $toto[2], $toto[3].
DimVar a écrit :comment récupérer dans une "variable de type array"
le résultat d'un filefindnextfile, autrement qu'en utilisant cette syntaxe (celle de l'exemple) ?
Une autre solution consisterait à faire une boucle While et de rajouter chaque résultat du FileFindNextFile dans une chaine.
Entre chaque valeur vous rajoutez un séparateur ('|' par exemple). Lorsque la fonction FileFindNextFile vous renvois une erreur vous sortez de la boucle (ExitLoop) puis vous traitez tout simplement votre variable par un StringSplit qui vous retournera un tableau tout fait. ;)

PS: Grillé par tolf au niveau rapidité, mais je laisse le post au cas ou. :mrgreen:

Re: [..] Cherche Aide pour les array

Posté : mar. 19 août 2008 17:54
par tolf
Tlem a écrit :
DimVar a écrit :Ex : Dim $toto[5]

La variable $toto pourra donc contenir 5 "valeurs".
En réalité dans cet exemple là, la variable $toto pourra contenir 6 "valeurs" (De $toto[0] à $toto[5])
En fait DimVar avait bien raison sur ce point (sauf grosse erreur de ma part bien sûr :mrgreen: ) : $toto contient 5 valeurs de $toto[0] à $toto[4]
D'ailleurs c'est toujours énervant dans les scripts de devoir faire :

Code : Tout sélectionner

$toto[Ubound($toto)[b][color=#FF0000] - 1[/color][/b]]
au lieu de :

Code : Tout sélectionner

$toto[Ubound($toto)]
pour obtenir la dernière valeur de l'array.
Tlem a écrit :Dans cet exemple, la variable $temp est bien déclarée par la boucle FOR et elle va prendre successivement 3 valeurs (De 0 à 3).
il y a bien 3 valeurs mais de 0 à 2.
Tlem a dû écrire trop vite dans son habituel souci de satisfaire toutes les demandes des autoitiens :mrgreen:

Re: [..] Cherche Aide pour les array

Posté : mer. 20 août 2008 01:27
par Tlem
tolf a écrit :En fait DimVar avait bien raison sur ce point (sauf grosse erreur de ma part bien sûr :mrgreen: ) : $toto contient 5 valeurs de $toto[0] à $toto[4]
Oups :oops:
Me suis fait encore une fois avoir entre la déclaration par DIM et la création du tableau par StringSplit (J'étais déjà en train de cogiter à la réponse pour FileFindNextFile :? ).
En effet une déclaration DIM crée un tableau du nombre d'éléments demandé (5 pour DIM $toto[5], alors que la fonction StringSplit mettra 5 valeurs dans un tableau de 6 éléments (L'élément 0 contiendra le nombre d'éléments du tableau).
tolf a écrit :D'ailleurs c'est toujours énervant dans les scripts de devoir faire :

Code : Tout sélectionner

$toto[Ubound($toto)[b][color=#FF0000] - 1[/color][/b]]
au lieu de :

Code : Tout sélectionner

$toto[Ubound($toto)]
pour obtenir la dernière valeur de l'array.
En fait ca ne fonctionne pas à tous les coup (Voir ma description précédente sur StringSplit par exemple (Mais il y à d'autres fonctions de ce type).
tolf a écrit :Tlem a dû écrire trop vite dans son habituel souci de satisfaire toutes les demandes des autoitiens :mrgreen:
Effectivement c'est une erreur de frappe. :?
Trop pressé comme d'ab, je devais partir faire des courses pour acheter du matos pour refaire ma cuisine ...
Bon ça va j'ai fini de passer l'enduit et la peinture (Reste juste une petite couche pour demain matin). Demain : meubles, plan de travail, placard et l'évier. 8)

Re: [..] Cherche Aide pour les array

Posté : jeu. 21 août 2008 23:24
par ani
pompom dimvar ;)

Tout ce qui sera précédé du caractère dollars sera une variable, dans la boucle for next, la variable $temp est en faite un indice, la lecture en speudo-code donnera ceux-ci

code :: for $temp = 0 to 2
speudo-code :: Pour $temp elle sera comprise entre 0 à 2

Comme on l'a signalé
On déclare par dim la variable $toto celui-ci est souvent appelé un conteneur qui et lui même un tableau (dans ton cas elle est composé de 3 élèments).

Array = tableau

Re: [..] Cherche Aide pour les array

Posté : ven. 22 août 2008 12:09
par DimVar
Absent deux jours, désolé du retard...

Nickel comme à chaque fois !
Des réponses claires et étoffées. Grand merci à tous pour l'aide.
Quel régal que la programmation, depuis que j'ai découvert ça, je plus m'en passer :shock:
Faut que j'automatise tout !!! C'est flippant et trop prenant !

Et la montée en compétences grâce à ce forum m'épanouit de plus en plus.

Encore merci à vous. :D
J'embraye de suite avec une question FTP...

Arrayement votre.