Problème d'arguement en C
virus321
-
virus321 -
virus321 -
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 ?
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
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
il ne te reste qu'a definir fonctionChargerFichier
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
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 :(
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 :(
En effet ce n'est pas simple du tout mais je comprend deja mieux ce que tu veut faire :) ...
sa pourrait ressembler a sa:
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é
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é