[Ex] Un parseur de ligne de commande pour batch.
Posté : mer. 27 avr. 2011 17:55
Bonjour
Je suis en train de réaliser un parseur de ligne de commande pour réaliser des jobs autoit en batch. ( en anglais : line arguments parser )
L'idée, c'est d'aider à créer un batch qu'on appelle avec des options du style : toto.exe -B parm1 -C parm2 -x 1 -v 0 ( par exemple )
Parce que par défaut, quand on écrit toto.au3, le code pour analyser les arguments est à écrire de A à Z, et à recommencer quasiment à zéro pour le batch suivant si il a besoin d'autres paramètres...
Voici déjà ce que j'ai trouvé sur le net:
- http://www.autoitscript.com/forum/topic ... parameter/
- http://code.google.com/p/my-autoit/sour ... tParse.au3
- http://motersho.com/blog/index.php/2009 ... -approach/
Bref, du très compliqué et difficile à adapter à son usage personnel...
J'ai commencé à réfléchir à quelque chose qui ressemblerait à getopts, et je me suis dit que j'allais obtenir le même résultat que ce que j'avais déjà trouvé sur le net.
Je pars donc sur une approche vraiment nouvelle (à priori hein..) qui va consister à pêcher dans les arguments de la ligne de commande les seuls arguments qui m'intéressent et à ignorer les autres.
[edit: livraison version 0]
Exemple : Ce script est destiné à faire tourner un sql sous windows : il a besoin d'une base oracle (-B), d'un schéma (-S) et d'un password (-P)
Il accepte en option un mail (-m) et une option -v 1 ( mode verbose activé)
Il faut donc définir les 2 tableaux suivants:
Dim Const $LINEARGS_MANDATORY[3][2] = [["-S", "SCHEMA"],["-P", "SCHEMAPASS"],["-B", "BASEORACLE"]]
Dim Const $LINEARGS_OPTIONALS[2][3] = [["-M", "MAILRAPPORT", "test@test.org"],["-v", "VERBOSE", 0]]
Puis, du moment qu'on déclare que -S, c'est "SCHEMA", alors après l'analyse des arguments d'appel, on va retrouver la valeur dans $SCHEMA qu'il faut donc déclarer comme variable globale. On fait de même pour les variables qui récupèrent des valeurs.
Je conseille d'utiliser des variables qui soient "parlantes", car elles servent également à créer le message d'aide.
Exemple pour ici ,voici ce qu'on obtient si on lance le script avec l'option -h :
Syntaxe:-S SCHEMA -P SCHEMAPASS -B BASEORACLE [-M MAILRAPPORT] [-v VERBOSE]
Le tableau $LINEARGS_MANDATORY contient les arguments obligatoires, et est donc à 2 colonnes, ( flag, et variable affectée )
Le tableau $LINEARGS_OPTIONALS contient les arguments optionnels et est donc à 3 colonnes ( flag, variable affectée , valeur par défaut ).
Je pense qu'on peut transposer ce code bien plus facilement pour écrire d'autres batch que tous les codes de parseurs que j'ai pu voir jusqu'ici.
Voici le code ( certainement perfectible) :
Je suis en train de réaliser un parseur de ligne de commande pour réaliser des jobs autoit en batch. ( en anglais : line arguments parser )
L'idée, c'est d'aider à créer un batch qu'on appelle avec des options du style : toto.exe -B parm1 -C parm2 -x 1 -v 0 ( par exemple )
Parce que par défaut, quand on écrit toto.au3, le code pour analyser les arguments est à écrire de A à Z, et à recommencer quasiment à zéro pour le batch suivant si il a besoin d'autres paramètres...
Voici déjà ce que j'ai trouvé sur le net:
- http://www.autoitscript.com/forum/topic ... parameter/
- http://code.google.com/p/my-autoit/sour ... tParse.au3
- http://motersho.com/blog/index.php/2009 ... -approach/
Bref, du très compliqué et difficile à adapter à son usage personnel...
J'ai commencé à réfléchir à quelque chose qui ressemblerait à getopts, et je me suis dit que j'allais obtenir le même résultat que ce que j'avais déjà trouvé sur le net.
Je pars donc sur une approche vraiment nouvelle (à priori hein..) qui va consister à pêcher dans les arguments de la ligne de commande les seuls arguments qui m'intéressent et à ignorer les autres.
[edit: livraison version 0]
Exemple : Ce script est destiné à faire tourner un sql sous windows : il a besoin d'une base oracle (-B), d'un schéma (-S) et d'un password (-P)
Il accepte en option un mail (-m) et une option -v 1 ( mode verbose activé)
Il faut donc définir les 2 tableaux suivants:
Dim Const $LINEARGS_MANDATORY[3][2] = [["-S", "SCHEMA"],["-P", "SCHEMAPASS"],["-B", "BASEORACLE"]]
Dim Const $LINEARGS_OPTIONALS[2][3] = [["-M", "MAILRAPPORT", "test@test.org"],["-v", "VERBOSE", 0]]
Puis, du moment qu'on déclare que -S, c'est "SCHEMA", alors après l'analyse des arguments d'appel, on va retrouver la valeur dans $SCHEMA qu'il faut donc déclarer comme variable globale. On fait de même pour les variables qui récupèrent des valeurs.
Je conseille d'utiliser des variables qui soient "parlantes", car elles servent également à créer le message d'aide.
Exemple pour ici ,voici ce qu'on obtient si on lance le script avec l'option -h :
Syntaxe:-S SCHEMA -P SCHEMAPASS -B BASEORACLE [-M MAILRAPPORT] [-v VERBOSE]
Le tableau $LINEARGS_MANDATORY contient les arguments obligatoires, et est donc à 2 colonnes, ( flag, et variable affectée )
Le tableau $LINEARGS_OPTIONALS contient les arguments optionnels et est donc à 3 colonnes ( flag, variable affectée , valeur par défaut ).
Je pense qu'on peut transposer ce code bien plus facilement pour écrire d'autres batch que tous les codes de parseurs que j'ai pu voir jusqu'ici.
Voici le code ( certainement perfectible) :
► Afficher le texte