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 :

Fichier .mat: ajout/renommage variables


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Par défaut Fichier .mat: ajout/renommage variables
    Bonjour à tous,

    Débutant sous MatLab, je dois améliorer un programme existant en factorisant le contenu de trois 3 fichiers mat: ces 3 fichiers sont les suivants:

    F1_N001.mat:
    champ1: 'titre'
    champ2: 'version'
    champ3: 'date'
    champ4_1: cellule_1 NxM

    F1_N002.mat:
    champ1: 'titre'
    champ2: 'version'
    champ3: 'date'
    champ4_2: cellule_2 NxM

    F1_N003.mat:
    champ1: 'titre'
    champ2: 'version'
    champ3: 'date'
    champ4_3: cellule_3 NxM
    Et j'aimerais avoir au final un seul fichier:

    F1.mat:
    champ1: titre
    champ2: version
    champ3: date
    champ4: cellule_1 NxM
    cellule_2 NxM
    cellule_3 NxM
    Ce fichier F1.mat contiendrait la concaténation des champs 'champ4_x' avec un nouveau nom (champ4).
    Voilà mon code MatLab:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    % Chargement du fichier MAT pour récupérer l'entête %50
    fichierMATcharge = load('F1_N001.mat'); %51
    % Suppression du champ4 %52
    EnteteMAT = rmfield(fichierMATcharge, 'champ4_1'); %53
    % Creation du fichier MAT final avec l'entete %54
    save('F1.mat', '-struct', EnteteMAT, 'champ1', 'champ2', 'champ3'); %5
    % Récupération des donnees champ4_x et renommage du premier champ %56
    champ4 = load('F1_N001.mat', 'champ4_1' ); %57
    donneeChamp4_2 = load('F1_N002.mat', 'champ4_2' ); %58
    donneeChamp4_3 = load('F1_N003.mat', 'champ4_3' ); %59
    % Ajout des données à la fin du fichier %60
    save('F1.mat', 'champ4', 'donneeChamp4_2', 'donneeChamp4_3', '-append'); %61
    J'obtiens le fichier F1.mat suivant:
    champ1: 'titre'
    champ2: 'version'
    champ3: 'date'
    champ4: cellule_1 NxM
    donneeChamp4_2: cellule_2 NxM
    donneeChamp4_3: cellule_3 NxM
    A la ligne 61, si je supprime les ' autour des 'donneeChamp4_x', j'ai une erreur de string; en fait, je n'arrive pas à renommer un champ dans mon fichier .mat et à concaténer des données à la fin. D'après le web, j'ai vu que l'on pouvait utiliser '-struct' et '-append' en même temps dans le save mais toute mes tentatives se sont conclues par des échecs.
    Est-ce que quelqu'un à une idée, une piste ?
    Merci d'avance.
    aVr

    PS: je n'ai pas utilisé la fonction 'eval' de Matlab car je ne la maitrise pas bien.

  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
    Citation Envoyé par avrSag Voir le message
    je n'ai pas utilisé la fonction 'eval' de Matlab car je ne la maitrise pas bien.
    Et tu as très bien fait, il ne faut pas l'utiliser, jamais....

    Bon, tout d'abord relis bien la doc de LOAD.
    Quand tu fais ceci (ligne 57) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ4 = load('F1_N001.mat', 'champ4_1' );
    Ce que tu obtiens ce n'est pas la valeur de champ4_1 dans champ4 mais (et il suffit de le vérifier) :
    champ4 =

    champ4_1: cellule_1 NxM
    Pourtant tu avais l'air d'avoir saisi ce point dans le début de ton programme...

    Il y a surement plusieurs façons de faire mais il est certain qu'il faut à la fois bien comprendre le fonctionnement des structures et le fonctionnement de SAVE.

    Le plus simple à mon avis est de faire de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    % Chargement du fichier MAT pour récupérer l'entête %50
    fichierMATcharge = load('F1_N001.mat'); %51
    % Suppression du champ4 %52
    EnteteMAT = rmfield(fichierMATcharge, 'champ4_1'); %53
    % Creation du fichier MAT final avec l'entete %54
    save('F1.mat', '-struct', EnteteMAT, 'champ1', 'champ2', 'champ3'); %5
    % Récupération des donnees champ4_x et concaténation dans une variable
    champ4 = champ4_1;%deja en memoire 
    load('F1_N002.mat', 'champ4_2' ); %58
    load('F1_N003.mat', 'champ4_3' ); %59
    champ4 = {champ4_1;champ4_2;champ4_3}
    % Ajout des données à la fin du fichier %60
    save('F1.mat', 'champ4', '-append'); %61
    Par contre je ne suis pas très sure de voir comment tu comptes concaténer tes données dans champ4.

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

Discussions similaires

  1. [MySQL] Retour fichier Xml ajouter une variable
    Par Loupita dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/05/2012, 16h54
  2. [Débutant] Decouper un fichier .mat en differentes variables puis sauvegarder
    Par Kichott dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/07/2009, 18h51
  3. [Batch] Renommage d'une partie du nom d'un fichier à nb de caractères variable
    Par jjaffeux dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 08/07/2009, 18h36
  4. variables dans un tableau lisible dans workspace ou un fichier .mat
    Par pompier21 dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 18/12/2008, 17h04
  5. Supprimer une variable dans un fichier .mat
    Par ancrou dans le forum MATLAB
    Réponses: 4
    Dernier message: 08/06/2007, 11h58

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