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 :

Appel d'une variable à partir d'un string


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Appel d'une variable à partir d'un string
    Bonjour,

    Je suis débutant et malgré plusieurs recherches, je ne trouve pas la solution à mon problème.

    Dans une variable, j'ai un string. J'ai également une variable ayant le même nom que le string. J'aimerais faire un plot de la variable mais en appelant le nom de l'autre variable.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    variable212_1 = [1 2 3];
     
    TempM = 'variable212_1';

    et j'aimerais plot variable212_1 mais en allant chercher le nom de variable dans la variable TempM.

    Merci beaucoup et bonne journée

  2. #2
    Membre du Club
    Homme Profil pro
    Doctorant Mécanique
    Inscrit en
    Décembre 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant Mécanique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Salut

    tu peut utiliser la fonction "eval" comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    doc eval
    toto=10
    tata='toto'
    eval(tata)

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    l'utilisation d'eval est très déconseillé, surtout dans ce cas de figure.

    Si tu es débutant, je te conseille de na pas prendre cette habitude et de chercher une alternative. Pourquoi as-tu besoin de stocker tes noms de variables dans une autre variable?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Bob_Tom Voir le message
    Salut

    tu peut utiliser la fonction "eval" comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    doc eval
    toto=10
    tata='toto'
    eval(tata)
    Merci Bob_Tom

    la fonction eval() fonctionne bien avec ton exemple, par contre, j'ai un matrice de 21086x2 dans toto. La fonction me retourne des nombre qui n'ont pas de signification avec la vrai matrice toto.

    Ce que j'essaie de faire est ceci:
    J'entre des paramètres de base dans une fonction (le numéro d'une chambre dans ma situation) et à partir de ce numéro, je dois importer des fichiers et créer des variables portant le numero de la chambre(jusque la c'est ok grâce à la fonction assignin qui construit des variables à partir d'une string). Ensuite je dois appeler ces variables pour faire un plot et c'est là que le problème se pose. Je voulais (d'ou vient mon problème énoncé) utilisé une variable (avec un string) pour me donner le nom de la variable. Avez-vous une autre solution?

    merci et bonne journée

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    créer des variables portant le numero de la chambre
    Le problème vient de la. Pourquoi vouloir nommer la variable comme la chambre.

    Avez-vous une autre solution?
    Si tu ne traites qu'une chambre à la fois, le nom de la variable n'a pas d'importance. Sinon, crée un cell array contenant les données, et un vecteur de numéro de chambres correspondant. Tu peux ensuite extraire une chambre via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data_hotel{datas_numero== numero}
    En règle général, les eval() peuvent être remplacés par des listes ou des structures qu'il suffit d'indicer correctement

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci de vos réponses.

    J'ai finalement utilisé les eval(). Je ne comprends pas pourquoi ce n'est pas recommandé.
    Est-ce à cause du chargement des variables à chaque fonction?

    Merci beaucoup et bonne journée.

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par dgreg4 Voir le message
    J'ai finalement utilisé les eval(). Je ne comprends pas pourquoi ce n'est pas recommandé.
    Tout d'abord parce que eval peut rendre le code très confus et donc cela gène la lisibilité: pense à quelqu'un qui veut reprendre ton code ou même toi après un long moment, comment connaitre les noms des variables?

    Ensuite, je crois qu'eval peut poser certains problèmes d'exécution de code dans des cas particuliers.

    Et dans la majeure partie des cas, il existe des alternatives qui ne sont pas difficiles à mettre en oeuvre.

    Pour plus de renseignements:
    Alternatives to the eval Function
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Je ne comprends pas pourquoi ce n'est pas recommandé.
    En règle générale (ce n'est pas spécifique à matlab, et l'importance des points peut varier d'un langage à l'autre), les dangers d'un eval sont:

    * La lenteur.
    On doit parser et intérpreter un chaine de caractère, parfois lancer un second intepréteur. La mémoire locale est pleine de variables (plutôt que d'avoir un unique conteneur, comparer les variables <x1,x2,x3,...> à une unique liste x(1), x(2),...). La conversion des string peut prendre du temps (par exemple x=1 vs eval('x=1.000') )

    * La mauvaise lisibilité,
    donc difficulté à maintenir et debogger

    * L'absence d'aide à la programmation
    Les erreurs de syntaxes ne sont détectés qu'à l’exécution, pas avant. Par exemple avec <x=y>, Matlab peut vérifier avant l’exécution que la variable y a été déclarée ; alors que <eval('x=y')> plantera à l’exécution. Et il vaut mieux être conscient de l'erreur avant de lancer un code qui peut mettre des heures à tourner.

    * La sécurité.
    Si le string évalué provient d'internet ou d'un fichier modifiable, il peut être dangereux de l'eval (peut conduire à effacer des fichiers ou communiquer des infos confidentielles)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2013, 23h07
  2. [Toutes versions] Appel d'une variable par son nom (string)
    Par Wini29 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2013, 20h43
  3. [Débutant] appeler une variable à partir d'une chaine de caractères
    Par caoutchouc159 dans le forum MATLAB
    Réponses: 3
    Dernier message: 06/04/2012, 11h56
  4. [PHP 5.0] appel d'une variable global dans un autre fichier à partir d'une classe
    Par andry.aime dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2009, 09h31
  5. appel d'une fonction à partir d'un popup
    Par villeneuvejsp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/12/2004, 17h00

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