Getoptions : récupère les arguments en ligne de commande

Soyez le premier à donner votre avis sur cette source.

Vue 16 824 fois - Téléchargée 478 fois

Description

Ce petit bout de code permet d'analyser simplement les arguments passés en paramètre à la fonction 'main' d'une application.

L'objet GetOpts implémente les méthodes des interfaces Iteratior et Enumeration et permet donc de :
- récupérer l'argument associé à une option.
- tester si un argument était obligatoire ou non pour l'option.
- tester si il y a au moins une option trouvée.
- etc...

seule bémol, le code ne gère pour le moment que les options courte...
edit: je viens d'ajouter la gestion des options longues et/ou courte, options courtes collées, arguments collés

PS : Je sais bien qu'il existe des classes (genre d'apache) pour faire ce petit boulot mais bon personnellement j'aime pas vraiment utiliser d'autres classes que celles créés par sun :P

Source / Exemple :


package org.cs;

import java.util.Enumeration;

import org.cs.getopt.GetOptElement;
import org.cs.getopt.GetOpts;
import org.cs.getopt.LongOption;

/**

  • File : org.cs.GetOptsTest.java <br>
  • Description : Classe de test pour l'objet GetOpts<br>
  • @author Twinuts
  • /
public class GetOptsTest { public static void main(String[] args) { // pour switcher sans toucher le code ^^ boolean short_opt = false; Enumeration<GetOptElement> opts = null; if(!short_opt) { // construction de la liste d'options longues et courtes LongOption options [] = new LongOption[] { new LongOption("help", 'h', LongOption.REQUIRED_ARGUMENT), new LongOption("up", 'u', LongOption.REQUIRED_ARGUMENT), new LongOption("plop", 'p', LongOption.REQUIRED_ARGUMENT), new LongOption('f', LongOption.NO_ARGUMENT), new LongOption("j", 'z', LongOption.REQUIRED_ARGUMENT) }; // création de l'objet GetOpts opts = new GetOpts(args, options); } else // création de l'objet GetOpts en lui passant la liste d'options courtes // ici le ':' signifit que l'option attend un argument opts = new GetOpts(args, "h:u:p:g:1:fj:"); // liste d'options while(opts.hasMoreElements()) { // récupération de l'option GetOptElement e = opts.nextElement(); // affichage des info System.err.println("Short Option : " + e.getShortOption() + ", Long Option : " + e.getLongOption() + ", Argument : " + e.getArgument() + ", Required : " + e.isRequiredArgument()); } } }

Conclusion :


Voir la capture pour l'exemple d'utilisation.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Marty35 Messages postés 2 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 10 septembre 2009
10 sept. 2009 à 16:38
Intéressant et pratique.

Il aurait été sympa d'avoir une doc avec et une javadoc encore mieux ...

Enfin, ça me fait tout de même gagner un peu de temps hormis le dépouillage du script pour voir le fonctionnement et les possiblités.
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
26 juin 2008 à 15:24
voilou modification faite ^^
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
18 juin 2008 à 11:36
Salut,

"Pourquoi n'implémentes tu pas java.utils.<E>Iterator"
>> J'ai fait la modification mais je ne l'ai jamais postée ici, je verrais si j'ai le temps de le faire pendant mes vacances.

"sinon, si j'ai bien compris ton code, on ne peut pas gerer :
-a -b -c
comme :
-abc
et c'est gennant (cf les recomandations unix au sujet du passage des arguments.)"
>>je sais bien... lorsque j'ai fait ce code c'était uniquement pour une utilisation super simplifiée du getopt d'unix (ce qui collait à mon besoin). Mais j'en prend bonne note et je vais essayer de voir également si je peux ajouter le support complet des options courtes et longues, mafois je ne garanti pas une nouvelle version dans les jours à venir vu je manque cruellement de temps en ce moment.

cela dit merci pour l'intérêt apporté à ce code :)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
18 juin 2008 à 11:01
salut
Pourquoi n'implementes tu pas java.utils.<E>Iterator
sinon, si j'ai bien compris ton code, on ne peut pas gerer :
-a -b -c
comme :
-abc
et c'est gennant (cf les recomandations unix au sujet du passage des arguments.)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.