[MATLAB] script pour d'autre script

Résolu/Fermé
kwyjibo - 14 janv. 2008 à 19:21
 kwyjibo - 15 janv. 2008 à 13:17
Bonjour,

voici comment est organisé mon espace de travail et mes fichier *.m :


dossier projet :

-script.m

-dossier 1 :
=>script.m
=>fonction 1.m
=>fonction 2.m

-dossier 2 :
=>script.m
=>fonction 1.m
=>fonction 2.m

-etc...

j'aimerai que un script puisse lancer un script qui est dans un des dossiers.

Est-ce possible ? Il y a-t-il des précaution à prendre ?
Si oui lesquels/comment ?
A voir également:

8 réponses

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
14 janv. 2008 à 21:51
Salut kwijbo
Tu veux dire un truc dans le genre : tu choisis un nombre k et le metascript est un peu comme ça (celui qui est au même niveau d'arborescence que tous tes dossiers):

Je notes tes dossiers dossier_1, dossier_2, etc... parce que je sais pas si Matlab aime les espaces.

function metascript(k)
dossier_cible=['dossier_',num2str(k)];
cd(dossier_cible)
script
cd ..

Ça rentre dans le dossier numéro k que t'auras choisi, ça lance le script à l'intérieur et ça en ressort.
Je suis à côté de la plaque ou est-ce que c'est ce que tu cherches?
2
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
14 janv. 2008 à 22:17
Cool alors, de rien...
Là le truc que j'ai fait, il faut que ce soit toi qui choisisses directement le nom du dossier (comme t'as dû le voir).

Si tu veux qu'il y ait un ptit truc écrit qui te demande quel exercice tu veux lancer le script ressemblera à ça:

function metascript
k=input('Quel exercice voulez-vous lancer? > ');
disp(['Lancement de l''exercice ', num2str(k), '. Attention! Accrochez vos ceintures! On y va...']);
dossier_cible=['dossier_',num2str(k)];
cd(dossier_cible)
script
cd ..

Mais bon... l'interface qui demande et le disp c'est un peu gadget et un peu naze en fait.

Pour les explications:
metascript : plus d'argument, il t'es demandé après
input : il attend que t'aies mis un nombre
disp : il te dit "je lance l'exercice". Attention : bien mettre les deux apostrophes (c'est pas des guilllemets) à l''exercice
et après comme taleur
1
sinon est-il déja possible d'excecuter un script à partir d'un autre script ?

merci d'avance
0
Merci pour ta réponse

Je vais essayer cette piste, je suis pas super fort en matlab pour te dire si c'est exactement ça.

C'est un projet pour mes études

ce que je voudrai idéalement, c'est de lancer un seul script qui me demande en input un n° d'exercice
ce numero d'exercice lancer la script ce situant dans un des dossiers (ou je vais enlenver les espaces) et lancerai le script "script" comme si je le tappais dans "l'explorer matlab"
et me renvoyé le resultat des fonctions qu'il execute.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je viens de tester et d'adapter tes lignes de codes et la seule chose à dire, c'est que c'est nickel !

Merci encore
0
Merci beaucoup, voilà le resultat de mon adaptation :

function metascript()

% ce metascript permet l'execution des scripts des differentes questions
% sans avoir à ouvrir le dossier concerné, tout ce fait à partir d'ici !!


k=input('entrez le n° de la question pour executer le script : ');

switch k
case{1}

dossier_cible=['Question',num2str(k)];
cd(dossier_cible)
disp(' ')

disp('retour arrière pour continuer avec les autres questions')

case{2,3,4}

dossier_cible=['Question',num2str(k)];
cd(dossier_cible)
script
cd ..
otherwise
disp('n° introuvable')
end


j'ai quand même quelques notions, mais le metascript, je connaissais pas, on l'avait pas vu en cours, et l'aide de matlab des fois....

sinon j'ai une question,
est-il possible pour le cas ou k=1 de faire une pause, de permettre à l'utilisateur de voir les fonctions qui sont à l'interieur, et d'appuyer sur enter pour revenir au dossier parent, ou une astuce de ce genre.

Je pense que non car si un script est en cours d'execution, je peux pas ouvrir de m-files, ça doit etre dans le même genre, mais si il y avait une petite façon de faire un break pour que l'utiliateur doit appuyer sur entrer pour revenir au dossier parent (cad avant d'enchainer sur =>cd ..)

d'ailleur a quoi correspond plus précisement les .. apres le cd ?
0
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
14 janv. 2008 à 23:29
Le metascript c'est juste un nom que je lui ai donné parce qu'il était celui qui mettait en route les autres, c'est pas une fonction Matlab spéciale. Tu peux l'appeler celine_fion si t'en as envie par exemple.
Les parenthèses sont pas utiles au fait, juste metascript suffit quand il y a pas d'argument.

En fait je comprends pas bien ce que fait ton k=1.
Sinon pour faire une sorte de pause pour que la personne voit ce qu'elle peut faire, fais un ls, ça liste les fichiers d'un dossier.

Et après tu refais un input du genre "Alors que choisissez vous?"

Le .. après le cd c'est pour remonter d'un cran dans l'arborescence des dossiers. Par exemple si t'es dans Coucou/Toi/Matlab/Dossier_pipo/ et que tu tapes cd .. tu te retrouves dans Coucou/Toi/Matlab/
T'as jamais ouvert de fenêtre de commande sous Mac? Je pense que c'est cd .. aussi.

J'ai pas tout en détail ce que tu veux faire, mais si tu veux faire un truc pour qu'un script se lance quand la personne tape un nombre ou remonte dans l'arborescence quand la personne tape juste entrée ou le numéro d'un fichier qui existe pas, tu peux faire un test sur le k comme tu l'as déjà fait. Si c'est aucun des fichiers possibles tu remontes.
0
le k=1 c'est parceque dans le dossier Question1 il n'y a pas de script à executer, c juste des fonction qui sont la, donc c juste pour ouvrir et refermer le dossier.
je test le ls


merci
0