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

MATLAB Discussion :

problème avec les working directory


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut problème avec les working directory
    bonsoir,

    j'aimerai exécuter un script qui n'est pas dans mon working directory matlab.

    Mon script s'appelle script, il est dans C:\tata\toto. mon working directory est C:\matlab\work.

    je rajoute le chemin vers mon script dans matlab path:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    >>addpath C:\tata\toto
    j'exécute ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    path='C:\tata\toto';
     
    kk=sprintf(path,'%s',script);
     
    eval('run %s',kk);
    et matlab m'affiche comme erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    ??? Attempt to execute SCRIPT script as a function.
     
    Error in ==> start at 7
    kk=sprintf(path,'%s',script);
    Je crois que j'ai fait une erreur de syntaxe. pouvez vous la corriger ?

    merci beaucoup,

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    1. Il ne faut pas appeler une variable PATH, PATH est le nom d'une fonction MATLAB

    2. Qu'y a-t-il dans la variable script ?

    3. Puisque tu as fait un ADDPATH tu n'as pas besoin de donner le chemin

    4. EVAL c'est le mal (presque EVIL en anglais c'est pour dire )
    Ce n'est pas nécessaire, comme je te l'ai dit il n'y a pas longtemps, si le nom de ta fonction est dans une variable il faut utiliser la forme fonctionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mafonction='help';
    run(mafonction);
    5. D'ailleurs je ne peux vérifier mais je ne crois pas que EVAL sache évaluer le '%s'

  3. #3
    Membre éprouvé
    Avatar de mr_langelot
    Profil pro
    Inscrit en
    Août 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 113
    Par défaut
    ... et je rajouterais, même si caro-line a dégainé plus vite que moi et a dit l'essentiel, que sprintf était mal utilisé.


  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    salut,
    merci pour la reponse.

    en effet, j'aimerai executer une liste de test sur mon model simulink. J'ai mis dans un dossier Tests mes scripts qui initialisent les entrees de mom models. j'aimerai faire une boucle for sur ses fichiers afin de les parcourir en entier.

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    cd(Tests_path);
        A=ls;
     
        cd(Matlab_current_directory);
     
    for loop = 3:2:size(A,1)
        tic                                                       
        simulation_input;                                           
     
        % loading needed parameters
     
        cd(Tests_path);
        parameter_file = sprintf(A(loop,:));
        A(loop,:)
        run(parameter_file);
     
        cd(Matlab_current_directory);
    avec Test_path le chemin vers mon dossier Tests, la ou j'ai mis mes scripts de tests.

    quand je lance le script, J'obtiens comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ??? Error using ==> run at 69
    Undefined variable "param_1" or class "param_1.m".
    effet, le premier script dans mon dossier Tests s'appelle param_1.m.

    Merci de votre aide

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Je pense qu'il faut enlever le ".m" en utilisant par exemple FILEPARTS.
    Ou dans ce cas si on est vraiment sur que l'extension est .m.

    Pourquoi faire tous ces CD ? Alors que tu as montré dans un autre topic que tu connaissais l'existence de ADDPATH ?

    Note : Utiliser LS peut être dangereux en général on préfère utiliser DIR qui est multi-plateforme (Comment lister les fichiers d'une certaine extension dans un répertoire ?)

    Je ferais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    files = dir(fullfile(Tests_path,'*.m'));
    addpath(Tests_path);
     
    for loop = 3:2:length(files) %là je ne suis pas sure :
    %je suppose que tu commençais à 3 pour ne pas prendre . et ..
    %dans ce cas tu peux commencer à 1
    %Par contre je ne comprends pas le pas de 2
        tic                                                       
        simulation_input;                                           
     
        % loading needed parameters
        [dummy,parameter_file,ext] = fileparts(dir(loop).name);
        run(parameter_file);%ou feval(parameter_file);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    d'accord, je vais essaye, merci beaucoup. :)

    pour le 2, en fait, c'est que mes fichiers sont regroupes par pair. Dans un premier temps je dois recuperer les fichiers situes a des indices pairs..voila.
    A plus,

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Et on te l'a déjà fait remarqué avant... prend le temps de lire la documentation de la fonction SPRINTF (ou FPRINTF)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    Salut,
    Est ce aue t'es sur qu'on peut definir la commande dir sur des double, en ecrivant dir(loop) ?

    quand je lance mon script, j'obtiens l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?? Error using ==> fileparts at 17
    Input must be a row vector of characters.
    il me semble que ma version matlab ne reconnaisse pas dir(loop).name en tant que string

    merci

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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