Page 1 sur 1
[R] Aide pour une boucle
Posté : mer. 26 févr. 2014 00:38
par tekserver
Bonsoir le forum,
Je bosse sur un script pour l'automatisation du paramétrage de plusieurs PC pour ma boite. Je débute fraîchement dans ce domaine du scripting mais grâce à ce forum et aux nombreux exemples et documentations j'ai pu déjà faire deux trois trucs sympa alors qu'il y a quelques jours j'y songeais pas
Je suis tombé sur le tuto des
boucles j'ai un peu compris le truc mais il va me falloir beaucoup de pratique pour en être sur
Je rencontre un problème et je pense que justement il me faut un boucle, mais je n'arrives, je demande donc votre aide
Le script à son lancement demande à l'utilisateur, le numero du PC ($Ks), le nombre de PC présent dans la boutique ($Nks) et l'ip du routeur ($Routeur). Grace à l'ip du routeur je peux savoir qu'elle IP aura le premier PC de la boutique ($IpKs1) ou ($Ipdepart).
L'idée de la boucle est de stocker dans des variables l'IP des PC présent dans la boutique, genre si ($Nks) = 5 alors le script stock 5 variables:
$IpKs1 = $Ipdepart
$IpKs2 = $Ipdepart + 1
$IpKs3 = $Ipdepart + 2
$IpKs4 = $Ipdepart + 3
$IpKs5 = $Ipdepart + 4
j'ai construis la boucle comme ceci et évidement ça ne fonctionne pas

Je pense être à coté de la claque ...
Code : Tout sélectionner
For $i = 1 To $Nks Step 1
($IpKs[$i]) = ($Ipdepart + [$i])
Next
Bon j'avoue je ne sais pas si j'ai été clair dans mon explication de jeune padawan
Merci bien à vous,
Cordialement.
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 08:02
par Tlem
Bonjour.
On pourrait comme vous avez cherché à le faire, utiliser des variables numérotés pour stocker les différentes addresses IP, mais pour ce type d'application, un simple tableau suffit.
Donc voici un exemple avec boucle et tableau :
Code : Tout sélectionner
#include <array.au3> ; Cette ligne ne sert que pour l'affichage du tableau.
$Nks = 5 ; Nombre de machines
Dim $aIpks[$Nks] ; On cree un tableau avec autant d'éléments que $Nks
$Tronc = "192.168.1." ; On defini le tronc commun de l'IP
$IPdepart = 0 ; On defini la derniere valeur IP - 1
For $i = 1 To $Nks step 1 ; Debut de la boucle.
$aIpKs[$i] = $Tronc & ($IPdepart + $i) ; Chaque element du tableau ce voit octroyer le tronc IP + une valeur incrémenté de $IPdepart + $i soit 0 + 1 à 5.
Next
_ArrayDisplay($aIpKs) ; Affichage du tableau.
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 14:03
par tekserver
Bonjour Tlem,
Merci beaucoup pour votre réponse.
Je pense avoir compris votre boucle, cependant en testant le code tel quel, afin d'être sur de bien le comprendre et de l'adapter à mon script (si je peux l'appeler comme ca

) j'obtiens une erreur:
Code : Tout sélectionner
(10) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
J'ai l'impression que c'est le tableau (Array) qui pose problème, j'ai oublié de préciser un détail important dans mon message initial, le but de cette boucle est décrire dans un fichier .txt ( IP + poste qui correspond à l'ip ) mais avant de faire cette partie d'écriture, c'est le principe de la boucle que j'aimerais bien comprendre.
Encore merci,
Cordialement.
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 14:42
par tekserver
Re,
J'ai réussi à trouver une petite solution pour la première partie de mon soucis, la boucle
Code : Tout sélectionner
#include <array.au3> ; Cette ligne ne sert que pour l'affichage du tableau.
$Nks = 5 ; Nombre de machines
Dim $Ipks[$Nks]
$Tronc = "192.168.1." ; On defini le tronc commun de l'IP
$IPdepart = 0 ; On defini la derniere valeur IP - 1
For $i = 1 To $Nks step 1 ; Debut de la boucle.
$IpKs[$i] = $Tronc & ($IPdepart + $i) ; Chaque element du tableau ce voit octroyer le tronc IP + une valeur incrémenté de $IPdepart + $i soit 0 + 1 à 5.
MsgBox(1,"",$IpKs[$i] & " " & "PC0" & $i)
Next
Reste à comprendre pourquoi il affiche 4 fois la msgbox alors qu'il y a dans cette exemple 5 machines.
Je vais commencer à regarder comment écrire ce résultat dans un fichier, en fin de fichier.
Cordialement.
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 15:05
par jguinch
Le MsgBox ne s'affiche que 4 fois car le script s'arrête au moment où il rencontre l'erreur.
Le code de Thierry est bon, mais il a introduit une erreur
Ca tombe bien, cette erreur est courante et tu risques d'y être confronté souvent, donc autant que tu comprennes pourquoi.
Un tableau commence toujours à l'index 0, et non à 1 : donc pour le tableau $aIpks de 5 lignes, tu auras $aIpks[0] jusqu'à $aIpks[4].
Thierry demande à la boucle for de boucler de 1 à 5, là il n'y a aucun souci.
Mais en alimentant le tableau, Thierry a fait l'erreur. $i va s'incrémenter au fur-et-à-mesure et va arriver à 5, or $aIpks[5] n'existe pas, d'où le message d'erreur.
Donc il suffit de mettre
$aIpKs[$i - 1] = $Tronc & ($IPdepart + $i) et tout sera réglé.
Au aurait pu aussi faire aller la boucle de 0 à 5 et ajouter 1 à $IPdepart
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 16:02
par tekserver
Re,
Merci pour ta précision jguinch, je capte un petit peu mieux pourquoi il n'indique pas tout, enfin je pense
Voici comment j'ai adapté la boucle donné par Tlem dans mon script, pour l'exemple ci-dessous j'ai juste mis les variables obtenu par les inputs
Code : Tout sélectionner
; Pour info l'ip du routeur et la dernière IP et la premier est toujours à - 29 de ce dernier.
$Nks = 5 ; Nombre de machines
$Pdv = 1234 ; Numéro de Point de vente
$Ip1 = 10 ; Valeur de l'input, Rang 1 de l'ip, via un GUICtrlRead
$Ip2 = 1 ; Valeur de l'input, Rang 2 de l'ip, via un GUICtrlRead
$Ip3 = 50 ; Valeur de l'input, Rang 3 de l'ip, via un GUICtrlRead
$Ip4 = 30 ; Valeur de l'input, Rang 4 de l'ip, via un GUICtrlRead
$Ipdepart = ($Ip4 - 29)
$Tronc = $Ip1&(".")&$Ip2&(".")&$Ip3&(".")
Dim $Ipks[$Nks]
For $i = 0 To $Nks step 1 ; Debut de la boucle.
$IpKs[$i] = $Tronc & ($IPdepart + $i) ; Chaque element du tableau ce voit octroyer le tronc IP + une valeur incrémenté de $IPdepart + $i soit 0 + 1 à 5.
MsgBox(1,"",$IpKs[$i] & " " & $Pdv & "PC0" & $i + 1)
Next
Ça fonctionne bien, ça m'affiche désormais correctement les choses, cependant j'ai encore une erreur non bloquante dans AutoIt:
Code : Tout sélectionner
(14) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$IpKs[$i] = $Tronc & ($IPdepart + $i)
^ ERROR
Je verrai après pour l'écriture dans un fichier.
Encore merci à vous,
Cordialement.
Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 20:03
par Tlem
Oui désolé, mais j'ai tapé le code vite fait sur la tablette Android pendand mon petit déjeuner, donc pas pu testé. Au départ j'étais parti sur un Ubound du tableau -1 mais j'ai voulu au dernier moment utiliser la variable du nombre d'IP en pensant que ca serait plus compréhensible ...
D'où l'erreur de débutant.

Re: [..] Aide pour une boucle
Posté : mer. 26 févr. 2014 20:19
par mikell
$Nks=5 => Dim $Ipks[$Nks] => le tableau a 5 lignes (d'index 0 à 4 comme l'a brillamment expliqué jguinch)
For $i = 0 To $Nks => boucle de 0 à 5, soit 6 fois
ça va bien marcher les 5 premières (d'où l'impression d'erreur non bloquante) mais à la 6ème ($i=5) => erreur parce que $Ipks[5] n'existe pas
Relis la ligne 4 du post de jguinch : la 1ère ligne du tableau c'est $Ipks[0], la dernière $Ipks[4]
For $i = 0 To $Nks-1 => tu boucles le nombre correct de fois
Re: [..] Aide pour une boucle
Posté : jeu. 27 févr. 2014 23:07
par tekserver
Bonsoir à tous,
Effectivement j'avais mal compris ce que décrivait jguinch, et pourtant j'avais relu plusieurs fois, merci à vous.
Je vous tiens au courant sur l'évolution de cette boucle car j'aimerais profiter de cette dernière pour faire une chose de plus, je cherche des infos avant.
Merci encore à vous.
Cordialement ++
Edit: Résolu.