Page 1 sur 1
[R] Réception de paramètres
Posté : lun. 09 févr. 2009 10:55
par ricky
Hello,
quelle est la fonction pour détecter si on envoie ou pas des paramètres au exe?
Merci d'avance pour votre aide.
Re: [...] réception de paramètres
Posté : lun. 09 févr. 2009 11:15
par Yogui
Code : Tout sélectionner
If $CMDLine[0] > 0 Then ; vérification si paramètre
$Services = $cmdline[1] ;lecture du 1er paramètre
$Computer = $cmdline[2] ;lecture du second
Else
msgbox(0,"erreur","paramètre obligatoire")
EndIf
Re: [...] Réception de paramètres
Posté : mar. 10 févr. 2009 14:00
par ricky
Merci pour ta réponse Yogui, mais existe-t-il un moyen qu'il reconnaisse par exemple /c=c:\Temp au lieu de prendre les paramètres dans l'ordre?
Re: [...] Réception de paramètres
Posté : mar. 10 févr. 2009 14:53
par Yogui
je pense avoir besoin de plus de précision :s
/c=c:\Temp

Re: [...] Réception de paramètres
Posté : mar. 10 févr. 2009 14:59
par ricky
Dans l'exemple que tu me donnes, le programme prend les paramètres dans l'ordre.
Par exemple, pour un programme, dans une fonction j'ai besoin de 4 paramètres exemple : test.exe 1 2 3 4
Et dans une autre fonction il me faut que 2 paramètres, exemple : test.exe 1 4
Dans certains programmes tu peux lui envoyer par exemple : test.exe /a=salut /c=c:\temp /t=3 /s=1
Et là, j'aimerais qu'il me lise ce qu'il y a par exemple après le /a et le /s.
Re: [...] Réception de paramètres
Posté : mar. 10 févr. 2009 15:56
par Yogui
Je me suis embarqué dans un truc :s
enfin je met mon code ici je suis 100 % certain qu'il doit y avoir plus simple
Code : Tout sélectionner
Dim $param, $saisie, $premier, $second, $trois, $quatre
$nombreparam = $cmdline[0]
MsgBox(0, '', $nombreparam) ;récupération du nombre de parametre
For $i = 1 To $nombreparam Step 1
If $cmdline[$i] <> "" Then
$param = $param & "|" & $cmdline[$i] ;je met les parametre dans une variable séparer par des | "a=param1|c=param3"
EndIf
Next
$paramR = StringSplit($param, "|") ;je découpe ma variable de stockage pour tout récupérer dans un tableau
For $i = 2 To $paramR[0] Step 1
$paramS = StringSplit($paramR[$i], "=") ;je découpe chaque ligne du tableau par le "="
Select
Case $paramS[1] = "a"
$premier = $paramS[2]
Case $paramS[1] = "b"
$second = $paramS[2]
Case $paramS[1] = "c"
$trois = $paramS[2]
Case $paramS[1] = "d"
$quatre = $paramS[2]
Case Else
MsgBox(0, "erreur", "ben quoi ?")
EndSelect
Next
MsgBox(0, "", "param1 = " & $premier & @CRLF & "param2 = " & $second & @CRLF & "param3 = " & $trois & @CRLF & "param4 = " & $quatre) ;j'affiche le résultat :)
l'appel se fait avec de 1 à 4 paramètres
exemple
c:\toto.exe a=premier d=dernier
mais je pense que les pros peuvent faire mieu
Edit pour prendre en compte les modifications de tolf (mais celui de Tlem est plus propre)
Re: [...] Réception de paramètres
Posté : mar. 10 févr. 2009 16:15
par ricky
Ah ok, merci, ça devient vite compliqué. J'espère qu'il existe moins compliqué quand même.
Merci beaucoup pour ton aide
Re: [..] Réception de paramètres
Posté : mar. 10 févr. 2009 20:55
par tolf
@Yogui : Pensez à utiliser l'outil "Tidy" de Scite (raccourci CTRL+T) pour rendre votre code plus lisible

(les ElseIf en escalier ça fait mal aux yeux

)
Re: [..] Réception de paramètres
Posté : mar. 10 févr. 2009 22:20
par Yogui
Merci pour le tidy je ne connaissait pas
et pour le elseif en escalier en fait j'ai fini vite sans prendre le temps de faire un case
edit : correction avec du code en suivant les recommandations
Re: [..] Réception de paramètres
Posté : mar. 10 févr. 2009 22:26
par Tlem
Voici une autre solution :
► Afficher le textecode
Code : Tout sélectionner
#include <Array.au3>
Dim $a, $c, $t, $s
; ###################################################################
; Ceci est pour la démo. A supprimer dans le script final.
If not @Compiled then
MsgBox(16, "Erreur", "Le script doit être compilé et lancé comme ceci : " & @TAB & @CRLF & _
"test_Param.exe /a=salut /c=c:\temp /t=3 /s=1")
Exit
Endif
; ###################################################################
If $cmdline[0] Then ; On contôle qu'il y à bien des paramètre en entrée.
$aParam = StringSplit(" " & $CmdLineRaw, " /", 1) ; On découpe la ligne de paramètre en tableau.
If IsArray($aParam) Then ; Si nous avons bien un tableau (paramètres entrés comme ceci : /x=...)
If $aParam[1] = "" Then _ArrayDelete($aParam, 1) ; On vire la ligne vide.
For $Boucle = 1 to $aParam[0] - 1 ; Boucle sur le nombre de paramètre.
$aParamIn = StringSplit($aParam[$Boucle],"=") ; Découpage de chaque ligne de paramètre.
Assign($aParamIn[1], $aParamIn[2]) ; Attribution automatique de la valeur à la variable.
; La variable est crée en fonction du nom du paramètre.
; Si vous rajoutez un paramètre /toto, la variable
; $toto est alors automatiquement crée.
Next
EndIf
; Affichage des variables.
MsgBox(64, "Infos", "En considérant la ligne de commande suivante : " & @TAB & @CRLF & _
"test_Param.exe /a=salut /c=c:\temp /t=3 /s=1" & @CRLF & @CRLF & _
"le paramètre /a est : " & $a & @CRLF & _
"le paramètre /c est : " & $c & @CRLF & _
"le paramètre /t est : " & $t & @CRLF & _
"le paramètre /s est : " & $s )
Else
MsgBox(16, "Erreur", "Aucun paramètre !!!") ; Si pas de paramètre alors erreur.
EndIf
Ce n'est pas forcément plus simple, mais épuré de toutes les fioritures, le code tient sur 12 lignes.
Par contre il crée automatiquement les variables en fonction du paramètre rentré.
Cela dit, il faut quand même déclarer les variables à utiliser sous peine d'erreurs lors de la compilation.

Re: [..] Réception de paramètres
Posté : mer. 11 févr. 2009 08:42
par Yogui
Le même avec une étape en moins qui ne sert à rien il devient donc plus simple
l'appel se fait toujours
j'ai changé mes lettre d'appel de paramètre pour coller à ton exemple
► Afficher le texte
Code : Tout sélectionner
Dim $param, $saisie, $premier, $second, $trois, $quatre
For $i = 1 To $$cmdline[0] Step 1
$paramS = StringSplit($cmdline[$i], "=") ;je découpe dans un tableau chaque ligne du tableau cmdline par le "=" saisie par l'utilisateur lors de l'appel
Select ;je regarde la premiere ligne de $paramS et selon la lettre j'affecte dans la bonne variable
Case $paramS[1] = "a"
$premier = $paramS[2]
Case $paramS[1] = "c"
$second = $paramS[2]
Case $paramS[1] = "t"
$trois = $paramS[2]
Case $paramS[1] = "s"
$quatre = $paramS[2]
Case Else
MsgBox(0, "erreur", "ben quoi ?")
EndSelect
Next
MsgBox(0, "", "param1 = " & $premier & @CRLF & "param2 = " & $second & @CRLF & "param3 = " & $trois & @CRLF & "param4 = " & $quatre) ;j'affiche le résultat :) ;affichage dans un msgbox
Re: [..] Réception de paramètres
Posté : mer. 11 févr. 2009 10:08
par ricky
J'aime bien cette dernière version, mais j'ai quelques questions, pourquoi déclarer Dim $param, $saisie et jamais les utiliser?
Petite erreur à la ligne 2 $$cmdline[0]->$cmdline[0]
Dans les case il faut mettre /a, sinon, ça ne marche pas.
Ça marche bien. Merci beaucoup pour vos aides. Si vous avez d'autres codes...
Re: [..] Réception de paramètres
Posté : mer. 11 févr. 2009 10:19
par Yogui
pourquoi déclarer Dim $param, $saisie et jamais les utiliser?
m'apprendra à ne pas me relire ...
Re: [..] Réception de paramètres
Posté : mer. 11 févr. 2009 11:43
par ricky
Mais pourquoi déclarer des Dim?
Re: [..] Réception de paramètres
Posté : mer. 11 févr. 2009 11:51
par Yogui
l'habitude du vb en faite, je programme comme un cochon sans vraiment tenir compte de la portée des variables ce qui n'est pas bien du tout.
Re: [R] Réception de paramètres
Posté : mer. 11 févr. 2009 14:56
par ricky
Voilà, j'ai mis en résolu.
Le code ci-dessus, pourrais presque faire partie des exemples, non?