Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GETOPTIONS : RÉCUPÈRE LES ARGUMENTS EN LIGNE DE COMMANDE


Information sur la source

Catégorie :Divers Classé sous : getopt, arguments, main Niveau : Débutant Date de création : 22/04/2007 Date de mise à jour : 25/06/2008 20:00:17 Vu / téléchargé: 7 318 / 232

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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());
  • }
  • }
  • }
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.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   GetOptions
    •   bin
      •   org
        •   cs
          •   getopt
            • GetOptElement.classTélécharger ce fichier [Réservé aux membres club]1 147 octets
            • GetOpts$GetLongOptionsEnum.classTélécharger ce fichier [Réservé aux membres club]1 253 octets
            • GetOpts.classTélécharger ce fichier [Réservé aux membres club]6 500 octets
            • LongOption.classTélécharger ce fichier [Réservé aux membres club]1 799 octets
          • GetOptsTest.classTélécharger ce fichier [Réservé aux membres club]1 903 octets
    •   src
    • build.xmlTélécharger ce fichier [Réservé aux membres club]Voir ce fichier557 octets
    • COPYINGTélécharger ce fichier [Réservé aux membres club]35 147 octets
    • COPYING.LESSERTélécharger ce fichier [Réservé aux membres club]7 639 octets
    • getOpts.jarTélécharger ce fichier [Réservé aux membres club]7 738 octets
    • snapshot.jpgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier133 976 octets

Télécharger le zip

Historique

22 avril 2007 21:21:38 :
mauvais zip :P
22 avril 2007 21:27:39 :
Les accents ne sont pas passés ...
25 juin 2008 19:46:36 :
refonte du code, ajout de la gestion des options longues et/ou courte, options courtes collées, arguments collés, etc... bref nouvelle version
25 juin 2008 20:00:17 :
pb image

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 18/06/2008 11:01:20

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.)

signaler à un administrateur
Commentaire de Twinuts le 18/06/2008 11:36:47 administrateur CS

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 :)

signaler à un administrateur
Commentaire de Twinuts le 26/06/2008 15:24:45 administrateur CS

voilou modification faite ^^

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

java, JNI et DLL [ par Milie ] Bonjour, je vous écris pour un pb de chargement de DLL. J'ai déja fait un tutorial avec JNI de type HelloWorld mais j'ai à present besoin d'intergrer HELP ME Boucle dans main qui marche pas !!! [ par darktonight ] Bon j'ai un gros probleme que je n'explique pas, j'ai une classe de cette forme , c'est un parser SAX qui doit lancer un prgramme à chaque fois qu'ell main non trouvable [ par naji222 ] bonjour en executant un script propore à un logiciel PENEMED avec le contenu suivant#!/bin/sh. ../../config/sethome.sh${JAVA_HOME}/bin/java -classpath Problème de compilation avec javac.Main.compile [ par Kindasch ] Salut les gensJ'essaye de compiler un fichier dans une application et il y a une erreur:the method compile from com.sun.javac.Main is not static ???? Type STATIC (n°2) [ par BSide ] Bonsoir,j'ai un problème de compréhension du caractère "static" d'une variable ou d'une méthode. Je ne comprends pas vraiment à quoi ça sert. En quoi comment déployer une applet via un fichier jnlp [ par ourka631 ] Bonjour,Je vous demande comment on peut déployer une applet, c'est à dire l'exécuter sur un poste client à partir d'un fichier JNLP qui lance le java C'est quoi pour une erreur ? [ par oullafff ] Voici le message qu'il me vient... après avoir réussi à passer la compilation, je lance l'application et:java.lang.NoSuchMethodError: mainException in Exception in thread "main" java.lang.noclassDefFoundError: [ par zzt6p2 ] Salut à tous,Je suis novice je viens d'installer JDK 1.4j'ai configurer le pathen mode command sous windowsje compil mon fichier text avec javacj'obti Erreur Permission J2ME [ par hichame_elkhalfi ] quand je veut executer une application J2ME ya un erreur qui survient, je vous donne ce qu'il me sort//DEBUTProject "UIDemo" loadedRunning with storag Coups de main pour un débutant [ par mockmock ] Bonjour à tous,J'ai trouvé un petit programme Java fait de trois classes sur JavaFR.com. Il s'agit d'un programme de gestion de comptes bancaires. Cel


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.