[R] Lister code erreur

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

[R] Lister code erreur

#1

Message par jcaspar »

B :D onjour à tous !

Je souhaite désinstaller des imprimantes et récupérer les codes erreurs dans un tableau
puis les afficher dans une msgbox.

j'ai donc créer un tableau à deux dimensions , mais les données ne s’insèrent pas ...je dois probablement avoir un soucis de syntaxe

Pouvez vous m'expliquer comment procéder svp


En vous remerciant pour vos conseils :mrgreen:


Jean-Marc



► Afficher le texte
Modifié en dernier par jcaspar le jeu. 05 mars 2015 16:07, modifié 1 fois.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Lister code erreur

#2

Message par TomAijerrie »

Salut

Je me suis permis de modifier ton code.
Sa donne ça :

Code : Tout sélectionner

#include <Array.au3>
#include <MsgBoxConstants.au3>

Global $impList = ["IMP003","IMP004","IMP005","IMP006","IMP007","IMP008","IMP008_Brouillon","IMP013","IMP015","IMP003_LOCAL","IMP004_LOCAL","IMP015_LOCAL"]

Global $retour[UBound($impList)][3]

For $i = 0 To UBound($impList) -1
    $retour[$i][0] = $i
    $retour[$i][1] = $impList[$i]
    $retour[$i][2] = RunWait("rundll32 printui.dll PrintUIEntry /dn /n\\"&@computername&"\" & $impList[$i],"", @SW_SHOWMAXIMIZED)
    If MsgBox(4,"","Continuer ?",2) = 7 Then ExitLoop
Next

_ArrayDisplay($retour )
Vu que tu n'es plus débutant, tu devrais le comprendre facilement.

Je précise deux trois choses :
- RunWait plutôt que Run pour avoir le code de sortie plutôt que l'id du processus.
- Travailler avec des boucles plutôt que d'avoir plein de lignes quasi identiques.
- Pour ce qui est de l'usage de _ArrayInsert, tu lui demandait d’écrire dans une case non définie.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Lister code erreur

#3

Message par TomAijerrie »

J'allais oublier, la MsgBox :

Code : Tout sélectionner

Local $data = ""
For $i = 0 To UBound($retour) -1
    $data &= @LF & "Imprimante : " & $retour[$i][1] & @TAB & @TAB & "Erreur : " & $retour[$i][2] & @CR
Next
MsgBox(64,"Desinstalation d'imprimantes",$data)
 
à ajouter à la fin.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Lister code erreur

#4

Message par blacksoul305 »

Bonjour,

le code de mon voisin du dessus a l'air fonctionnel, bien que ce dernier présente un tableau 2D à 3 colonnes qui pourrait ne pas te convenir.
Bien que la solution donnée soit tout à fait convenable, je pense qu'il est important de parler un peu du code original, ou en tout cas au moins pour savoir ce qui marche et ce qui ne marche pas.

Déjà première chose, ton tableau est de 11 colonnes, alors que tu souhaites stocker 12 imprimantes. Il t'aurait donc fallu déclarer un tableau plutôt comme celui-ci

Code : Tout sélectionner

Global $retour[12][2]
En effet l'indice maximal sera 11 (car le tableau commence à 0), mais de 0 à 11 il y a bien 12 emplacements possibles.

Code : Tout sélectionner

Global $retour[11][2]
En déclarant ton tableau ainsi, tu as un tableau ayant des cases valables (pour l'indice en colonne) de 0 à 10 soit 11 cases.

Ensuite ta boucle principale. Il y a de grosses erreurs autant côté algorithmique pure que de compréhension. Pourquoi ? Tout d'abord, tu prends une boucle "for" (qui est un très bon choix pour ce que tu t'apprêtes à faire) et choisit comme variable compteur $imp. Dans ton code tu aurais pu mettre : $toto, $i cela n'aurait rien changé. Dans ta tête c'est différent. Toi tu as fait le rapprochement que si l'on ajouter "1" et qu'ensuite l'on incrémentait (boucle "for) à chaque fois on aurait 2, 3... et qu'au final on aurait $imp1, $imp2 etc... En tout cas je le vois comme ça. Et c'est faux.

Code : Tout sélectionner

for $imp = 1 to 12
veut bien dire que ça veut dire, c'est pour la variable $imp qui vaut 1 jusqu'à 12, en aucun cas AutoIt va prendre la liberté d'ajouter la valeur à la fin de ta variable pour en trouver une autre. En revanche, il y a une astuce qui agirait de la sorte, mais que je ne conseille pas du tout car pour se perdre y'a pas mieux, et je pars du principe qu'une variable a un et nom et une valeur, et que les deux ne sont pas censés être liés...

Code : Tout sélectionner

; astuce
For $i = 1 to 12 ; on déclare la variable compteur 1
      MsgBox(0,"",Execute("$imp" & $i)) ; on ajoute la valeur de $i à la fin de la chaîne de caractère "$imp" (qui n'est PAS une variable), et on affiche le contenu de la "variable" $imp$i où $i est la valeur de $i
Next
Ce code ci-dessus en revanche affiche bien ce qu'il y a dans tes variables $imp1, $imp2... Encore une fois, je ne te le conseille pas.

Je te conseille la solution de TomAjerrie qui est d'ajouter "manuellement" les valeurs de ton tableau sans passer par _ArrayInsert qui n'est pas adapté à la situation à mon avis.
Maintenant, si tu n'en as pas envie, tu peux aussi initialiser ton tableau après sa déclaration comme ça tu as juste à l'afficher :

Code : Tout sélectionner

    Local $retour[12][2] = [ _
                            ["Imprimante 1","Run(....."], _
                            ["Imprimante 2","Run(....."], _
                            ["Imprimante 3","Run(....."], _
                            ["Imprimante 4","Run(....."], _
                            ["Imprimante 5","Run(....."], _
                            ["Imprimante 6","Run(....."], _
                            ["Imprimante 7","Run(....."], _
                            ["Imprimante 8","Run(....."], _
                            ["Imprimante 9","Run(....."], _
                            ["Imprimante 10","Run(....."], _
                            ["Imprimante 11","Run(....."], _
                            ["Imprimante 12","Run(....."] ]
Remarque : le "_" permet de revenir à la ligne pour pouvoir améliorer la lisibilité.

Et donc là en faisant une boucle de 0 à 11, tu peux parcourir ton tableau et récupérer l'information que tu souhaites.

En espérant avoir été clair, bon courage !
Étudiant en 2ème année de Licence Informatique.
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

Re: [..] Lister code erreur

#5

Message par jcaspar »

Merci beaucoup pour vos réponses et vos explications !
Grâce à vous je progresse rapidement.

Jean-Marc
Répondre