[Ex] Lire des options passées en ligne de commande

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
SebastienAdam
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mar. 07 août 2007 20:33
Localisation : Bruxelles
Status : Hors ligne

[Ex] Lire des options passées en ligne de commande

#1

Message par SebastienAdam »

Bonjour à tous,

Voici une petite fonction qui permet, entre autre, de lire des options passées en ligne de commande:

Code : Tout sélectionner

Func OptArgs($args, $opt, $default)
    $arraySize = UBound($args)
    If $arraySize <= 0 Then
        Return $default
    EndIf
    For $i = 0 to $arraySize-1
        If StringRegExp($args[$i], "^[-/]"&$opt&"$") Then
            Return True
        EndIf
        If StringRegExp($args[$i], "^[-/]"&$opt&"[:=]") Then
            Return StringRegExpReplace($args[$i],"^[-/]"&$opt&"[:=]","")
        EndIf
    Next
    Return $default
EndFunc
 
Comment ça marche?

La fonction va détecter soit la présence d'un paramètre, soit sa valeur. Si le paramètre est présent sans valeur, la fonction retourne 'true'. Si le paramètre est présent avec une valeur, la fonction retourne la valeur. Si le paramètre n'est pas présent, la fonction retourne $default.

Exemple: On lance son script avec les options comme ceci:

Code : Tout sélectionner

monscript /a /b=paramb /c:paramc
La récupération des paramètres se fera comme suit:

Code : Tout sélectionner

...
$a = OptArgs($CmdLine, "a", false)
;"/a" est  présent sans valeur, la fonction retourne 'true'
$b = OptArgs($CmdLine, "b", "undef")
;"/b" est présent avec la valeur "paramb", c'est cette valeur qui sera retournée
$c = OptArgs($CmdLine, "b", "undef")
;"/c" est présent avec la valeur "paramc", c'est cette valeur qui sera retournée
$d = OptArgs($CmdLine, "d", "undef")
;"/d" est absent, la fonction retournera "undef"
...
L'intérêt de cette fonction est que les paramètres peuvent être donnés dans un ordre quelconque et ne doivent pas être tous présent.

Bonne journée à tous :-)
Modifié en dernier par SebastienAdam le mer. 08 août 2007 15:41, modifié 1 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#2

Message par ani »

excellent sebastienAdam, grand merci pour cette fonction :)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#3

Message par Tlem »

Excellent ...
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é".
Ron
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 08 oct. 2007 15:15
Status : Hors ligne

Re: [Ex] Lire des options passées en ligne de commande

#4

Message par Ron »

Ton script est excellent, cependant, tel qu'il est écrit, il est sensible à la case, ce qui, à mon avis (mais ce n'est que mon avis) n'est pas idéal. Pour ne pas le dénaturer et offrir à chacun la possibilité de faire comme bon lui semble, je l'ai modifié et lui ai adjoint un paramètre supplémentaire permettant de choisir si on est sensible à la case ou pas.

Code : Tout sélectionner

Func OptArgs($args, $opt, $default = False, $Sensitive = False)
    Local $arraySize
    Local $i
    Local $pattern
    if $Sensitive = true Then
        $pattern="^[-/]"&$opt
    else
        $pattern="(?i)^[-/]"&$opt
    EndIf
    
    $arraySize = UBound($args)
    If $arraySize <= 0 Then
        Return $default
    EndIf
    For $i = 0 to $arraySize - 1
        If StringRegExp($args[$i],$pattern&"$") Then
            Return True
        EndIf
        If StringRegExp($args[$i], $pattern&"[:=]") Then
            Return StringRegExpReplace($args[$i],$pattern&"[:=]","")
        EndIf
    Next
    Return $default
EndFunc;==> Fin OptArgs
 
Ainsi, l'appel à ta fonction devient :

Code : Tout sélectionner

$Debug=OptArgs($CmdLine, "debug", false,false)
 
Dans l'exemple si dessus, pour que $Debug soit true, on peut passer le paramètre /debug ou /DEBUG ou même /dEbUg

Si on veut rester sensible à la case et ne considérer que le paramètre /debug comme correct, le code deviendra :

Code : Tout sélectionner

$Debug=OptArgs($CmdLine, "debug", false,true)
 
J'espère que ces modifications te conviendront.

Ron
Avatar du membre
SebastienAdam
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mar. 07 août 2007 20:33
Localisation : Bruxelles
Status : Hors ligne

Re: [Ex] Lire des options passées en ligne de commande

#5

Message par SebastienAdam »

Ron a écrit :Ton script est excellent, cependant, tel qu'il est écrit, il est sensible à la case, ce qui, à mon avis (mais ce n'est que mon avis) n'est pas idéal. Pour ne pas le dénaturer et offrir à chacun la possibilité de faire comme bon lui semble, je l'ai modifié et lui ai adjoint un paramètre supplémentaire permettant de choisir si on est sensible à la case ou pas.
Le fait que le script soit sensible à la case était voulu (pour distinguer une option /r d'une option /R). Mais je trouve ton amélioration vraiment pertinente. Cela rend la fonction plus souple.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Lire des options passées en ligne de commande

#6

Message par Tlem »

Pour amélioré un petit peut plus la fonction ;), j'ai modifié le code de Ron pour rajouter des valeurs par défaut aux variables : $default et $Sensitive.
$Sensitive devient donc optionnel et rend la fonction non sensible à la case par défaut.
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é".
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [Ex] Lire des options passées en ligne de commande

#7

Message par Flop »

Je viens de poster un nouveau topic, ne retrouvant pas celui-ci, voici le lien ci qq peux m'aider.

http://www.autoitscript.fr/forum/viewto ... &sk=t&sd=a
Répondre