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 fonction éval


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Concaténer fonction éval
    Bonjour a tous.
    J'ai un programme qui boucle sur un certain nombre de jours et je récupere les valeur pour chaque jour avec un "eval(sprintf)".

    Au sortir de la boucle j'ai plusieurs fichiers qui s'appelle "toto50,toto58,toto60" etc... qui sont des vecteurs mais pas de même taille.

    Je cherche à les mettre à la suite dans un seul grand vecteur. Mais j'avoue que je me casse les dents...j'aimerais pouvoir lui dire de concaténer tous les vecteurs commençant par "toto*" et que l'étoile me permette de tous les récuperer.

    Mais sans succès. Si vous avz une solution, je suis preneur.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    EVAL c'est le MAL

    Si tu nous montrais ton code on pourrait te dire comment ne pas l'utiliser et ta vie deviendrait alors plus facile

    Comment créer des variables nommées A1, A2, A3, ...,AN ?


    Attention à ton vocabulaire :
    j'ai plusieurs fichiers qui s'appelle "toto50,toto58,toto60" etc... qui sont des vecteurs
    Alors ce sont des fichiers ou des vecteurs
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    oui pardon je ne me suis pas relu. Je voulais dire que j'avais des noms de variables "toto50..." qui sont des vecteurs mais de tailles différentes. Je ne peux donc pas utiliser la méthode citée dans le lien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    JOUR=[75 85 104 120 140];
    for i=1:length(JOUR)
     
    fid=fopen(.txt,'r');fgetl(fid);
    C=textscan(fid,'%s\t %s\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t %s\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t %8.4f\t');
     
    hum=C{5};
     
    eval(sprintf(['hum',num2str(JOUR(i)),'=hum'],i));
     
    end
     
    humtot=vertcat(hum75,hum85,hum104,hum120,hum140);
    j'ai largement soulagé le code pour qu'il soit lisible. Je lis un fichier texte différent à chaque itération

    Cette fonction eval me donne des noms de variables 'hum75 hum 85 ...'. J'aimerais pouvoir regrouper toutes les valeurs dans une seule variable "humtotal". Pour le moment je ne vois que vertcat(hum75,hum85...) inséré apres le end mais lorsque l'on a beaucoup de jours cela devient vite fastidieux...

    J'espère avoir été plus clair.

    Cordialement.


    PS : j'édite rapidement.
    Voici le lien où j'ai trouvé "l'astuce" du eval(sprintf), http://www.mit.edu/~pwb/cssm/matlab-faq_4.html#evalcell

  4. #4
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Tu as lu le lien FAQ que je t'ai mis ?
    Pourquoi veux-tu donner des noms aussi complexes à tes variables ?

    Ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(sprintf(['hum',num2str(JOUR(i)),'=hum'],i));
    C'est horrible, moi ça me fait peur
    Tu mélanges SPRINTF (qui ne sert à rien ici) et NUM2STR et tu rajoutes un EVAL par-dessus...

    Donc lis la FAQ dont je t'ai donnée le lien et si vraiment tu ne comprends pas explique pourquoi.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    J'ai besoin de prendre des noms de variables aussi complexe car , il faut que je discrimine au maximum, de façon à étudier mes données. Car j'ai simplifié, je n'ai mis que le jour mais je dois également discriminer selon plusieurs autres paramètres, les noms de variables permettent de m'y retrouver. Tout simplement

    Le sprintf me permet d'écrire le nom de la variable que je souhaite...ce qui correspond à mes besoins...

    Voila pour la réponse.

    Ensuite je ne suis pas un fou de matlab dc j'ai cherché cette astuce sur le net (via le lien que j'ai donné), il me paraissait fiable au vu de l'adresse, j'ai copié et ca a fonctionné...voilà la raison.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pourquoi ne pas former ton 'humtotal' dans la boucle directement en même temps que tes variables humN?

  7. #7
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Le lien que tu as donné est exactement la même chose que notre FAQ mais en anglais et dit la même chose : il ne faut utiliser EVAL que contraint et forcé.

    Ce n'est pas le cas ici, tu peux utiliser les cellules ou les structures ce sera tout autant discriminant.

    Ex Cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jour = [3,51];
    for i=1:length(jour)
       hum{i} = {'chp1','chp2',1,2,3};%j'ai l'impression que ta variable hum contient à la fois du texte et des nombres et que donc c'est un tableau de cellules ?
    end
     
    %trouver le hum correspondant au jour :
    jour = 51;
    hum{jour==51}
    Après tu as tout dans la variable hum mais si tu veux concaténer pour faire un unique tableau de cellules alors tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jour = [3,51];
    for i=1:length(jour)
       hum(i,:) = {'chp1','chp2',1,2,3};%j'ai l'impression que ta variable hum contient à la fois du texte et des nombres et que donc c'est un tableau de cellules de taille 1*n ?
    end
     
    %trouver le hum correspondant au jour :
    jour = 51;
    hum(jour==51,:)
    Note : rien de tout ça n'a été testé mais c'est l'idée.
    Règles du Forum

    Adepte de la maïeutique

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci pour les réponses. Je vais réfléchir à tout ca...

    PS: ma variable hum ne contient que des valeurs numériques.

    PS2: Les majuscules je trouve cela assez agressif, je ne sais pas si c'est le ton du post m'enfin...

  9. #9
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Pour les majuscules oui tu as raison, c'est agressif, cela équivaut à crier, et je t'en demande pardon (et j'ai modifié).

    C'est juste que quand le message ne semble pas passer, il faut utiliser les grands moyens et même si je t'agresse ainsi c'est pour toi pas pour moi.
    Car l'utilisation d'EVAL (là les majuscules sont pour mettre en valeur le nom des fonctions ) amène souvent à des erreurs très difficilement récupérables.

    ma variable hum ne contient que des valeurs numériques.
    Oui j'avais zappé le C{5}.
    Donc chaque hum est un vecteur numérique de taille n*1 et tu veux concaténer verticalement (j'espère que j'ai bon cette fois )

    Dans ce cas c'est encore plus simple.

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jour = [5,3,8];
    humtotal =[];
    for i=1:length(jour)
       %si tu veux aussi garder chaque hum pour la correspondant avec jour
        hum{i} = rand(i,1); %un vecteur de taille i*1
        humtotal = [humtotal;hum{i}];
    end
    Règles du Forum

    Adepte de la maïeutique

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Ca marche ! C'est super !
    Merci beaucoup. Et désolé pour le dérangement et ma manque de clarté.

    Cordialement

Discussions similaires

  1. Problème avec la fonction Val
    Par yannoch123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/06/2013, 15h47
  2. Problème avec la fonction Val()
    Par RenaudM dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2012, 16h37
  3. Problème fonction Val()
    Par leo_shad dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 04/12/2009, 17h51
  4. Concaténer fonction et texte dans une cellule
    Par Dsphinx dans le forum Excel
    Réponses: 4
    Dernier message: 07/08/2007, 09h16
  5. fonction val et les real
    Par leblanc.pascal dans le forum Delphi
    Réponses: 3
    Dernier message: 07/01/2007, 09h07

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