Problème d'arguement en C

Fermé
virus321 - 27 août 2010 à 09:46
 virus321 - 27 août 2010 à 10:40
Bonjour,

Alors, ça fait un moment que je bloque sur ce truc :
Imaginer que je veux lancer un programme en ligne de commande avec le syntaxe suivante:

client_ASR -parm=timout:1800ms#sos:1 -fichier=x.wav
-grammar=load_grammar:Essaie.grxml

voila ici il faut que je captre le -parm avec les élément qui sont dessus: timout=1800ms et sos=1 ensuite le -fichier=x.wav et load_grammar=Essaie.grxml

je sais que tout ça fait partie de la manipulation des chaines mais j'arrive pas à trouver la bonne solution :( sachant que ça va se faire au début du main :

int main (int argc, char **argv)

Avez vous une solution à me donner ?

4 réponses

Sweedi Messages postés 53 Date d'inscription jeudi 26 août 2010 Statut Membre Dernière intervention 22 octobre 2010 9
27 août 2010 à 10:02
Bonjour,
le premier paramètre du main correspond au nombre de paramètre que tu a donner au programme, le deuxieme paramètre est un tableau de chaine de charactère, il suffit donc de récupérer les valeurs dans ce tableau, attention le premier paramètre est le nom de ton programme

int main (int argc, char **argv) {
if(argc>1)
   fonctionChargerFichier(argv[1]);
}


il ne te reste qu'a definir fonctionChargerFichier
0
Merci pour la réponse,
mais la fonction charger fichier dois faire quoi au juste ?

Je sais très bien que dans argc je vais trouver la valeur 4
argv[0]=client_ASR
argv[1]=-parm=timout:1800ms#sos:1
argv[2]=-fichier=x.wav
argv[3]=-grammar=load_grammar:Essaie.grxml


mon problème réside que je dois traiter tout d'un seul coup, pour le argv[1] par exemple je dois vérifier que ça commencer par -param ensuite prendre la valeur timeout dans une chaine et la valuer 1800ms dans une autre. Ensuite je devrais voir s'il y a encore des paramètres à affecter et et cela et possible s'il y a le '#'. du coup une autre fois je dois chopper sos dans une chaine et la valeur 1 dans une autre.
et Ainsi de suite pour les autre argv[]


Pour ma part je trouve pas simple du tout :(
0
Sweedi Messages postés 53 Date d'inscription jeudi 26 août 2010 Statut Membre Dernière intervention 22 octobre 2010 9
27 août 2010 à 10:25
En effet ce n'est pas simple du tout mais je comprend deja mieux ce que tu veut faire :) ...
sa pourrait ressembler a sa:
char * tamp;
char param[NOMBRE_PARAM][TAILLE_PARAM];
param[0] = "parm=";
param[1] = "fichier=";
param[2] = "grammar=";
for(i=0;i<argc;i++){
    if((tamp = strstr(argv[i], chaineCherchée[i])) != NULL){
        strcpy(param, tamp);
    }
}

après il ne te reste qu'a utiliser param[];
bon il doit y avoir des erreurs je vien de l'écrire mais c'est un peu près comme sa que tu y arrivera.
j'espere t'avoir aidé
0
:) c'est claire c'est mieux qu'avant, je vais faire quelques essaie et je reviens.

Merci en tout cas :)
0