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

Soyez le premier à donner votre avis sur cette source.

Vue 15 885 fois - Téléchargée 455 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

Messages postés
2
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
10 septembre 2009

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.
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
97
voilou modification faite ^^
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
97
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 :)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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.