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 :

Identification des fonctions MATLAB présentes dans un *.m


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut Identification des fonctions MATLAB présentes dans un *.m
    Bonjour,
    J'aurais besoin de savoir s'il est possible d'identifier une fonction Matlab dans une ligne de commande d'un fichier *.m.
    En fait, je récupère toutes les lignes de commande du fichier *.m et j'aurais besoin de savoir si ces lignes de commande contiennent une fonction native de Matlab.

    Merci d'avance.

  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
    Je ne suis pas sure de bien comprendre : tu veux faire ça à la main ?

    Parce qu'il y a la fonction DEPFUN qui est très complète.

    Sinon "à la main", après avoir séparer les mots pour savoir si un mot est une fonction tu peux utiliser la fonction WHICH, suivant ce qu'elle te renverra tu sauras si c'est une fonction et même si c'est une fonction de MATLAB.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    Je développe un peu plus mon problème.
    Dans mon programme je scanne tous les fichiers *.m que je retrouve dans un répertoire père. Je les trie selon des tags dans leur nom.
    Les fichiers qui m'intéresse sont alors parcourus et les lignes de commandes Matlab (en fait chacune des lignes sauf les commentaires) sont stockés dans un tableau de cellule.

    Ma problématique : récupérer tout ce qui n'est pas une affectation, avec la contrainte de ne pas conserver les lignes de code qui utilisent une fonction native de Matlab.

  4. #4
    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
    J'ai relu depuis le début pour en revenir à ton vrai problème :
    Citation Envoyé par JackyPollux Voir le message
    Ma problématique : récupérer tout ce qui n'est pas une affectation, avec la contrainte de ne pas conserver les lignes de code qui utilisent une fonction native de Matlab.
    Une idée :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function out = nettoie(C)
    %C est une cellule, chaque élément contient une ligne de code...
    %on enlève tout ce qui contient le signe = (affectation)
    %et tout ce qui contient une commande native MATLAB
    out={};
    for k=1:length(C)
        res=traitement(C{k});
        if ~isempty(res)
            out{end+1}=res;
        end
    end
    %
    function res=traitement(in)
    res=[];
    %attention il peut y avoir des cas sournois...
    %ex : tafonction('hjkfhdksj=kljlk') sera enlevé
    if isempty(findstr(in,'='))
        %pas de signe = dans la phrase
        %maintenant sol° Dut
        A=strread(in,'%s','delimiter','() ');
        for n=1:numel(A)
            marche = exist(A{n});
            if marche == 5
                %dès qu'on trouve une fonction MATLAB on se casse
                return
            end
        end
        res=in;%ni =, ni fonction MATLAB on garde        
    end

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    J'ai repris la méthode de Dut et je l'ai adaptée à ma sauce.
    J'ai donc réussi à récupérer le contenu de la cellule et de définir si elle contient au moins une fonction native Matlab.

    Merci de votre patience et de vos conseils.

  6. #6
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    il te suffit alors d'utiliser la fonction exist.
    Exemple:
    retourne le chiffre 5 qui indique que c'est une builtin de MATLAB.
    Plus d'infos en tapant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    web([docroot '/techdoc/ref/exist.html'])

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    Le soucis c'est que je récupère une cellule d'un tableau de cellule et la fonction exist me retourne la valeur 1 quel que soit le contenu de la cellule.

  8. #8
    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
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> fun={'plot' 'rand' 'toto' 'sum' 'titi'}
     
    fun = 
     
        'plot'    'rand'    'toto'    'sum'    'titi'
     
    >> cellfun(@exist,fun)
     
    ans =
     
         5     5     0     5     0

  9. #9
    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
    Tu pourrais nous montrer un exemple ?

    Perso, je vois 2 problématiques :
    - Traiter la chaine de caractères pour récupérer le nom de la fonction => sais-tu le faire ?
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h=figure('Name','toto');%=> la fonction est figure
    - Une fois que tu as le nom de la fonction tu peux lui appliquer EXIST ou WHICH ou WHAT...

    Forcément si tu utilises EXIST sur le nom de ta cellule il te répond 1 puisque la variable représentant ta cellule existe...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    Je ne cherche pas forcément à traiter les chaînes de caractères contenues dans le tableau de cellule. Tout simplement, parce qu'elles ne sont pas toutes forcément des fonctions.

    Mais s'il y a une solution qui passe par le traitement de ces chaînes, je suis preneur.

  11. #11
    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
    As-tu vu le post de Dut ? (vu qu'on a répondu en même temps)
    Ce que je veux t'expliquer c'est que ta chaine de caractères dans ta cellule ressemble surement à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h=figure('Name','toto');%=> la fonction est figure
    Et si tu fais EXIST de ça tu n'auras rien, il faut que tu réussisses à récupérer le mot-clé "figure".

    Tu ne veux pas nous montrer un exemple ce serait plus simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les codes des fonctions matlab
    Par Lost in dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/05/2008, 15h36
  2. Regroupage des fonctions et procédures dans une unité
    Par gilardino dans le forum Débuter
    Réponses: 3
    Dernier message: 15/04/2008, 01h58
  3. Réponses: 8
    Dernier message: 07/05/2006, 18h35
  4. récupération des id non présente dans une CIF
    Par Zen_Fou dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/04/2006, 12h00
  5. Inclure des fonction matlab sous visual c++
    Par petdelascar dans le forum MFC
    Réponses: 3
    Dernier message: 21/11/2005, 17h03

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