[R] Cherche Aide pour les array

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

[R] Cherche Aide pour les array

#1

Message 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"....
Modifié en dernier par DimVar le ven. 22 août 2008 12:09, modifié 2 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..]Cherche Aide pour les array

#2

Message 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.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Cherche Aide pour les array

#3

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Cherche Aide pour les array

#4

Message 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:
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Cherche Aide pour les array

#5

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Cherche Aide pour les array

#6

Message 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
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Cherche Aide pour les array

#7

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Répondre