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 :

Concaténer nom d'une variable


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut Concaténer nom d'une variable
    Bonjour 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
    20
     
    for i=1:5
    list=[1.9 2.2 3.6 4.5]';
    varname='spread'; 
    id=list(i);
    varname1='ans'; 
     
    nom(i,1)=cellstr([varname,int2str(id),varname2]); %Concatene le nom de la variable et stock tous les noms pour réouverture
    save('spread-nom.mat',nom); sauvegarde de la variable associété au nom de la liste nom 
    end 
     
    save('spread-nom.mat','nom') %sauvegarde de la variable de liste de nom
     
    clear all; 
    load('spread-nom.mat','nom')
     
    for i2=1:numel(nom)
    nom_s = nom(i2,1); 
    load ('spread-nom.mat',nom_s);
    end
    le but du code étant de rendre propore le workspace, donc tous supprimer et recharcher les variables en boucle.

    Le problème :
    Argument must contain a string

    Si vous avez une idée

    merci

  2. #2
    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
    Bonjour,
    Ligne 8, si nom est un cell de noms de variables,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('spread-nom.mat',nom{:});

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Merci, là ça à l'air de passer, le problème remonte plus loin dans mon code au moment de créer la variable à enregistrer j'ai mis ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    disp([varname,int2str(id),varname2]) = log(PD);
    il me dit que la variable au nom concaterner n'existe pas, je comprend pas pourquoi ?

  4. #4
    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
    l me dit que la variable au nom concaterner n'existe pas,
    Tu devrais mettre le message d'erreur complet.

    Deja, disp() = ... n'a aucun sens ! disp() affiche une message dans la log et y assigner une valeur numérique ne veut rien dire !
    Ensuite, s'il se plaint sur une concaténation, c'est qu'une des 3 variables [varname,int2str(id),varname2] à un probleme

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je suis sur linux et je ne peux pas copier les messages d'erreurs, je ne comprend pas pourquoi le copier coller depuis linux ne fonctionne pas

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Error in interpolation (line 135)
    [varname,int2str(id),varname2] = log(PD);

    too many output arguments

    voilà le message

  7. #7
    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
    Si la fonction log est celle de Matlab, ta ligne ne veut rien dire : log() renvoie un seul output, et assigner dans int2str(id) ne veut rien dire.
    Que veux tu faire ici ? pourquoi trois outputs sur un calcul de logarithme ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je ne veux pas 3 output,

    je veux concaténer le nom pour que la variable s'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    spread_4_ans 
     
    comme varname = 'spread_'
    int2str(id) = 4; 
    varname1='ans'
    donc je m'attendais à avoir, le nom de la variable c.a.d

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [varname,int2str(id),varname2] = log(PD);
    donnerait : spread_4_ans = log(PD);.


    comme ça le chiffre au milieu changerait automatiquement avec la boucle for !

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat(2,varname,num2str(id),varname2)
    ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    non ça ne fonctionne pas

    je test num2string

    non toujours pas j'ai aucune variable qui se créer en ayant le nom concaterner !

  11. #11
    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
    cat(2,varname,num2str(id),varname2) et [varname,int2str(id),varname2] marchent tous les deux.

    Par contre ton problème, c'est que 'nom'= valeur ne marche pas car 'nom' est une variable contenant une chaine de caractère et non un identifiant matlab !

    Tu peux passer par eval pour faire ce que tu cherches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval([varname,int2str(id),varname2 "=" num2str(log(PD))] )
    Maintenant, c'est déconseillé, et il y a surement une meilleure solution sans eval()

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    a la limite je veux voudrais leur donner le nom id , et qu'a la fin il reste plus que toutes les variables id et que le reste soit supprimer

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Personne à une idée, de la façon dont je peux donner un nom dynamique à mes variables ? merci

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Ce n'est pas ce que tu recherches mais tu peux toujours utiliser un tableau de cellules en attendant; et si tu désires réellement garder le nom de tes variables, tu peux les mettre dans ta première colonne de cellule et dans la deuxième mettre tes données.

    Solution provisoire en attendant que quelqu'un te donne une meilleure solution

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse, ce que je ne comprend pas c'est si le nom de la variable est le même à chaque pas de la boucle.

    La variable crée par le 1er pas de la boucle sera écrasé par celle crée par le second pas.

    et je ne peux pas stocker la variable sous un autre nom fixe, car cette dernière sera écrasé aussi après le passage de la boucle.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je pense que créer une structure est une bonne idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avec s = struct([varname,int2str(id),varname2],valeur)
    le problème c'est si j'ai 10 nom de variable concaternés cela ne va pas créer 10 champs automatiquement

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par diego45 Voir le message
    Merci pour ta réponse, ce que je ne comprend pas c'est si le nom de la variable est le même à chaque pas de la boucle.

    La variable crée par le 1er pas de la boucle sera écrasé par celle crée par le second pas.

    et je ne peux pas stocker la variable sous un autre nom fixe, car cette dernière sera écrasé aussi après le passage de la boucle.
    Dans ce cas tu peux mettre les nouveaux champs de valeurs dans la colonne suivante par exemple.

    Pour la structure, ça me semble jouable mais je n'ai pas compris le
    Citation Envoyé par diego45 Voir le message
    le problème c'est si j'ai 10 nom de variable concaterner cela ne va pas créer 10 champs automatiquement

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    bien le code pour une structure est bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=struct(nomduchamps,valeur)
    Au premier pas de ma boucle, j'aurais un nom de champs, et un valeur, donc s va se créer, mais au second pas de ma boucle, j'aurais un nom de champs et des valeurs qui vont écraser les premiers il faudrait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s{i,1}=struct(nomduchamps(i,1),valeur)
    pour avoir une structure qui change les noms de champs à chaque pas; je ne sais pas trop si je suis clair

    une idée ? je m'arrache les cheveux sur le truc

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Toujours dans la même idée,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct.nom_de_variable{1} = mes_valeurs
    struct.nom_de_variable{length(struct.nom_de_variable)+1} = mes_valeurs

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Merci c'est ce que j'ai fais, sauf que je suis obliger d'utiliser int2str plutôt que num2str car les points ne rentre pas dans les nom de champs de structure

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 21h39
  2. Concaténer le nom d'une variable
    Par PKing dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 07/05/2008, 00h42
  3. [Tableaux] Concaténation du nom d'une variable
    Par nebule dans le forum Langage
    Réponses: 11
    Dernier message: 18/05/2006, 12h30
  4. Réponses: 37
    Dernier message: 02/03/2006, 02h58
  5. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 15h37

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