IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Récuperation des valeurs des arguments


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Récuperation des valeurs des arguments
    salut

    voila j'aimerai savoir, comment dois-je faire pour récupérer les valeurs d'un argument.

    exemple commande ligne
    donc
    argument 1:donnee.txt
    argument 2: -c
    argument 3: 2
    argument 4: L

    mais si par exemple j'ai ./tp donnee.txt -c 0-2 L, comment récupérer l'argument 0-2, mais je veux récupérer en fait le 0 + 2

    et dans le contexte ./tp donnee.txt -c -0-2 L cela ferait une erreur -0-2 car ça commence par -

    on fait c est la partie ou je coince, avec une seul valeur c'est ok
    mais plusieurs hmmm, je ne comprends pas comment les lires

    des suggestions

  2. #2
    Membre régulier
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Points : 107
    Points
    107
    Par défaut
    Bonjour

    Le prototype de la fonction main est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv)
    argc est le nombre de paramètres
    argv est le tableau contenant les paramètres.

    Dans l'exemple que tu cites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ./tp donnee.txt -c 0-2 L
    argc = 5
    argv[0] = "./tp"
    argv[1] = "donnee.txt"
    argv[2] = "-c"
    argv[3] = "0-2"
    argv[4] = "L"
    Les arguments sont sous forme de chaînes de caractères, donc tu peux très bien en extraire une partie.

    J'espère que ça répond à ta question.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    oui ça je suis au courant

    mais je n arrive pas à les extraire pour les utiliser

    par exemple j'aimerai bien faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if((strcmp(argv[2],"-L")==0) || (strcmp(argv[4],"-C")==0)){
     
       le code // ça ne marche pas
    }
    mais là je ne sais pas pourquoi, j'ai fait une boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(argc > 1){
    	 for(x=1; x<argc; x++){
            printf("argument numero %d: %s\n",x,argv[x]);
            if(x==2 && (strcmp(argv[2],"-c")==0)){
                  // code sa fonctionne mais je ne peut
           }
    pourquoi....

  4. #4
    Membre régulier
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Points : 107
    Points
    107
    Par défaut


    Alors, de mon côté, ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(int argc, char **argv)
    {
    	int i = 0;
    	printf("nb arg : %d\n",argc);
    	for(i=0;i<argc;i++)
    	{
    		printf("arg %d : %s\n",i,argv[i]);
    	}
     
    	if((strcmp(argv[1],"-L")==0) || (strcmp(argv[2],"-C")==0)){
    		i++;
    	}
    }
    en ayant ajouté comme argument : -L et -C.

    Donc je pense que ton problème est lié aux indices.
    Quand tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((strcmp(argv[2],"-L")==0) || (strcmp(argv[4],"-C")==0))
    Il faut que tu t'assures qu'il y a bien au moins 5 arguments.

  5. #5
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 652
    Points : 1 669
    Points
    1 669
    Par défaut
    Citation Envoyé par alyma Voir le message

    Il faut que tu t'assures qu'il y a bien au moins 5 arguments.
    Oui, et il est dommage d'imposer
    1) un ordre aux arguments passés (en fixant les indices),
    2) un nombre d'arguments. Si on passe des arguments qui sont obligatoires, ce ne sont plus des arguments, autant les hardcoder dans le programme....

    Edgar.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    ok
    mais se que je ne comprend pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ./tp donnee.txt -c 0-2 L
    argc = 5
    argv[0] = "./tp"
    argv[1] = "donnee.txt"
    argv[2] = "-c"
    argv[3] = "0-2"
    argv[4] = "L"
    comment je recupere le "0-2". en fait le 0 et le 2.

    je ne comprend pas parce que "0-2" et considerer comme un caractere dans le tableau non?
    je suis confu

  7. #7
    Membre régulier
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Points : 107
    Points
    107
    Par défaut
    si on a pour récupérer le 0 et le 2, étant donné que argv[3] est un char*; il faut faire:
    argv[3][0] et argv[3][2] (car le 0 et le 2 sont aux indices 0 et 2 dans la chaîne)

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Si tu travailles exclusivement sous Linux/Unix, je te conseille de regarder la fonction getopt, qui devrait correspondre exactement a ce que tu veux faire.

    Je ne connais pas suffisamment l'API Windows pour te donner l'equivalent.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/03/2011, 03h07
  2. [hook] Récuperer les valeurs des touches clavier
    Par TylerKnoxx dans le forum Windows
    Réponses: 0
    Dernier message: 09/12/2008, 11h06
  3. Réponses: 5
    Dernier message: 15/06/2007, 11h58
  4. Comment passer des valeurs en arguments
    Par remi77 dans le forum Excel
    Réponses: 6
    Dernier message: 13/03/2007, 11h54
  5. VBA Excel , récuperer la valeur des options buttons
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2006, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo