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 :

Comment enregistrer des vecteurs avec entêtes (en 1ere ligne) en .dat ou .xls


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut Comment enregistrer des vecteurs avec entêtes (en 1ere ligne) en .dat ou .xls
    Bonjour,

    Ca fait quelques jours que je tourne en rond par rapport a un probleme d'enregistrement de données:

    J'ai crée un programme matlab qui m'analyse des données, fait pleins de calculs, et a la fin j'ai une grande matrice de resultats qui en simplifié ressemble a ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    temps   pression  temperature  baterie  vitesse1 vitesse2 direction1 direction2
    ...      ...            ...        ...      ...     ...        ...          ...
    ...      ...            ...        ...      ...     ...        ...          ...
    ...      ...            ...        ...      ...     ...        ...          ...
    ...      ...            ...        ...      ...     ...        ...          ...
    sur X lignes (ca depend de la longueur des mesures - ce sont des resultats d'instruments oceanographiques).

    Bref, le probleme c'est que tout marche tres bien, j'obtiens ma matrice resultats (composée que des "...", sans la premiere ligne de titres evidement), et que je voudrais la placer dans un fichier .dat (ou .xls, mais je prefererais largment .dat) avec les suivantes caractéristiques:
    1.- La premiere ligne contient les titres
    2.- Le bloc temps=> baterie demarre a la colone A1 1ere ligne
    3.- Le bloc vitesse1>vitesseX demarre a la colone O1 1ere ligne
    4.- Le bloc direction1>directionX demarre a la colone AO1 1ere ligne

    Et c'est pas tout... le temps je l'ai sous la forme: "25-05-2010 11:40"


    Ce que j'ai fait pour l'instant:
    J'ai tout essayé avec xlsread, savetext,xlswrite,...
    Le plus compliqué c'est de lui dire "cree un seul fichier .dat (ou .xls) qui contienne des chiffres, du texte, et des cases vides (car entre baterie et vitesse1 il y a pleins de colonnes vides...)"

    Est-ce que quelqu'un a une piste a me donner?

    Merci beaucoup d'avance!!!
    Camille.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir Ccouzi,

    Pour créer le fichier excel, tu as l'explication dans la doc de xlswrite:
    Ensuite pour créer un fichier .mat, il faut mieux au préalable créer une structure ou des cellules comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    structure.temps = tempsdata;
    structure.presion =pressiondata;
    ...
    save file structure
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cellules = {'temps','pression','etc' ; tempsdata , pressiondata , etcdata};
    save file cellules

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Salut Winjerome, merci pour ta reponse.
    pendant que quelqu'un poste une response, j'ai continué a chercher et voici ce que j'ai fait:
    un test avec une toute petite partie de mes données:
    si j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    temperature=[12;15;16;14];
    presion=[36;35;32;36];
    Apres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    resultat.temp=temperature;
    resultat.pres=presion;
    Probleme!!!!!! quand je fais:
    save tableau_resultats.dat resultat
    ca marche, soit disant, mais en fait quand je vais chercher le fichier .dat il est vide...
    On peut enregistrer des cellules dans un .dat? ou seulement en .txt?

    deuxieme question: puisque mon temps est en format "25-05-2010 11:40", est-ce que je vais pouvoir mettre tout ca dans une seule celulle? (c a d, je veux que "25-05-2010 11:40" rentre dans une seule cellule, pas dispersée le long de la ligne...)

    Merci merci pour ton aide !!!

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Excuse moi, en fait matlab cree le tacleau.dat, mais quand j'essaie de l'ouvrir avec grapher (un tableur), il reconnait pas le fichier...

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    dsl, encore moi, j'ai modifié le code pour avoir mes titres en premiere ligne (c0est quand meme bien pour ca que je pose cette question!):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    temp=[12;15;16;14];
    pres=[36;35;32;36];
    resultat={'presion','temperature';pres,temp};
    resultat{:,1}
    save tableau_resultats.mat resultat
    puis je l'importe avec Import Wizard mais j'arrive pas a obtenir ma matrice avec les titres en pemiere ligne!!!

  6. #6
    Invité
    Invité(e)
    Par défaut
    désolé c'était .dat et non .mat, petite erreur de lecture

    Donc je te conseille de faire avec fprintf

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Bonjour WinJerome,
    Ok pour fprintf, j'avais vu cette possibilité, je suis en train de regarder l'aide sur l'help de matlab, mais vu que je ne connais pas du tout cette commande, pourrais tu peut etre m'indiquer en gros l'allure des commandes que je dois ecrire pour mon cas...?
    Merci encore pour ton aide.
    Camille.

    ps: avec fprintf je peux enregistrer sous n'importe quel format? .dat?. xls?
    Ce qui m'interesse c'est en .dat, donc avec des tabulations. il y a-t-il moyen d'indiquer a matlab sur quelle colonne du tableau placer un vecteur, et par exemple laisser une colonne du tableur vide (sans valeurs) entre deux vecteurs colonne?
    Merci d'avance!!

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

    Alors voici la procédure: (fprintf est pour le format .dat)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,[repmat('%s\t',1,nbcolonnes-1) '%s\n'],'temps' , 'pression' , 'temperature', ....);% Ecriture entête
    for i = 1:nblignes
        fprintf(fid,'%s\t',temps(i,:));   % texte
        fprintf(fid,'%f\t',pression(i));    % valeurs numériques
        etc...
    end
    fclose(fid);
    Sinon pour le texte dans xlswrite, utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlstext = cellstr(texte);
    xlswrite('fichier.xls',xlstext,'Feuille','A2');
    Dernière modification par Invité ; 10/06/2010 à 16h58.

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,
    alors j'ai lu pleins de posts des gens relatifs a fprintf et j'ai fait quelques essais.
    Si par exemple j'ai:
    a=[1;2;3;4];
    b=[5;6;7;8];
    c=[9;10;11;12];

    et je veux obtenir dans mon ficher 'resultats.dat' un tableau comme celui ci:

    titre_a titra_b titre_c
    1 5 9
    2 6 10
    3 7 11
    4 8 12

    c'est a dire sur la premiere ligne mes titres, trois colones au total, qui contiennent de la ligne 2 a la ligne 5 mes valeurs de vecteur a b et c.

    Voici le code d'essai que j'ai commencé a ecrire, sans tenir en compte de la partie "titres" (on verra ca plus tard):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    close all
     
     
    a=[1;2;3;4];
    b=[5;6;7;8];
    c=[9;10;11;12];
     
    fid = fopen('resultats.dat','w');
    fprintf(fid, '%d\t\n', a,b,c)
    fclose(fid);
    Il me cree mon fichier resultats.dat, mais me met mes vecteurs a b et c tous sur la meme colonne... comment je lui dis de mettre a sur la premiere colonne, puis b sur la deuxiemme et c sur la troisieme?

    Merci bcp pr ton aide...!
    Camille.

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    (salu winjerome je viens de voir le message que tu m'as posté, je l'avais pas vu... je le lis, j'essaie de faire ce que tu me dis dedans et je te repond, donc tiens pas trop en compte le message que j'ai posté juste avant!)Merci!

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Re!!
    Alors je viens d'appliquer ce que tu m'as indiqué a mon petit exemple simplifié (avec a b et c):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,[repmat('%s\t',1,2) '%s\n'],'titrea' , 'titreb' , 'titrec');% Ecriture entête
    for i = 1:4
        fprintf(fid,'%f\t',a(i));
        fprintf(fid,'%f\t',b(i));
        fprintf(fid,'%f\t',c(i));
    end
    fclose(fid);
    Et voici ce que j'obtiens dans mon .dat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "titrea"  "titreb"    "titrec"
    1             5             9      2  6   10   3   7   11   4   8   12
    c'est a dire qu'il me met bien les titres sur la premiere ligne, chacun dans sa bonne colonne, puis il met bien a(1), b(1) et c(1) dans les trois premieres colonnes mais apres il aligne les autres valeurs, c'est a dire qu'il manque une ligne de commande qui dise "quand tu as fini d'ecrire a(1), b(1) et c(1) sur la deuxieme ligne, tu sautes une ligne pour ecrire a(2), b(2) et c(2) sur la troisieme ligne, ect ect...

    J'espere que c'est compréhensible... :-)
    Merci bcp bcp pour ton aide!
    Camille.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Oui c'est normal,

    La syntaxe est la suivante:
    Lorsque tu veux changer de colonne, tu mets un '\t'
    Lorsque tu veux changer de ligne, un '\n'
    Pour ton code cela donnera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,[repmat('%s\t',1,2) '%s\n'],'titrea' , 'titreb' , 'titrec');% Ecriture entête
    for i = 1:4
        fprintf(fid,'%f\t',a(i));
        fprintf(fid,'%f\t',b(i));
        fprintf(fid,'%f\n',c(i));
    end
    fclose(fid);

  13. #13
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Ouaaaiisss!!!! ca marche!!!!! Trop fort!!! :-)
    J'ai meme fait un essai avec certaines de mes colonnes de mon vrai programme, donc en utilisant le temps en forma date (que tu passes en texte), et ca marche!
    Encore une question, et tout en restant sur l'exemple simple de a b et c (apres je transpose le truc sur mon vrai programme avec des milliers de colonnes et lignes :-)
    Si maintenant je veux que a soit sur la premiere colonne (A dans le tableur), b sur la deuxieme (B), apres je veux que la colonne C soit vide, puis placer mon vecteur c sur la colonne D? (avec evidement les titres respectifs bien placés)?
    (je continue a chercher et a faire des test de mon coté pendant que tu me reponds...)
    merci merci merciii!!!

  14. #14
    Invité
    Invité(e)
    Par défaut
    Et bien rien de plus simple, tu intercales un '\t' supplémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,'%s\t%s\t\t%s\n'],'titrea' , 'titreb' , 'titrec');% Ecriture entête
    for i = 1:4
        fprintf(fid,'%f\t',a(i));    % Colonne 1
        fprintf(fid,'%f\t\t',b(i));    % Colonne 2 et saut colonne 3    
        fprintf(fid,'%f\n',c(i)); % Colonne 3
    end
    fclose(fid);

  15. #15
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Salut Winjerome!
    Deux trucs:
    - Par rapport a la question precedente: ca me decale bien les valweurs du vecteur c a la colonne D, mais par contre le titre_c reste en position (3,1), comment faire pour qu'il se decale lui aussi, et qu'il aille en position (4,1)?

    -une petite question concernant maintenant un cas de matrice: maintenant j'ajoute une matrice d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d=[81 82 83;84 85 86;87 88 89; 90 91 92];
    et je veux qu'elle aille apres le vecteur c, c'est a dire la placer en colonne 5a8...
    comment faire?
    Si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,[repmat('%s\t',1,2) '%s\n'],'titrea' , 'titreb' , 'titrec');% Ecriture entête
    for i = 1:4
        fprintf(fid,'%f\t',a(i));
        fprintf(fid,'%f\t\t',b(i));
        fprintf(fid,'%f\t',c(i));
        for j=1:size(d,2)
            fprintf(fid,'%f\n',d(i,j));
        end
    end
    fclose(fid);
    Il ecrit la premiere colonne de d puis saute une ligne et ecrit la suite a la ligne... comment je lui dis "ecris toute la ligne, et quand tu es arrivé a la fin d'une ligne de la matrice d, alors la, tu saute une ligne, et tu ecris la suivante... :-)

    Merci enormement pour ton aide... je suis en train d'apprendre pleins de trucs interessants!!!!

  16. #16
    Invité
    Invité(e)
    Par défaut
    Il faut procéder par ligne en fait, comme pour le reste:

    D'abord tu écris
    81 82 83
    puis 84 85 86
    ....
    Procède ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fid = fopen('nom_fichier.dat','wt');
    fprintf(fid,'%s\t%s\t\t%s\n'],'titrea' , 'titreb' , 'titrec');% Ecriture entête
    for i = 1:4
        fprintf(fid,'%f\t',a(i));
        fprintf(fid,'%f\t\t',b(i));
        fprintf(fid,'%f\t',c(i));
        for j=1:size(d,2)-1
            fprintf(fid,'%f\t',d(i,j));
        end
        fprintf(fid,'%f\n',d(i,end));
    end
    fclose(fid);
    Désolé pour les titres, je l'ai modifié un peu plus tard

  17. #17
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Salut Winjerome,
    Merci! en fait j'avais trouvé une autre possibilité pour deplacer 'titre_c' (je bidouille comme je peux, j'essaye un peu au hazard et ca avait marché avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,[repmat('%s\t',1,nbcolonnes-1) '%s\n'],'titrea' , 'titreb' ,' ', 'titrec');% Ecriture entête
    (en mettant nbcolonnes=4 du coup)
    mais ta solution est netement plus jolie.

    J'ai encore une question:
    Si par exemple j'ai un vecteur horizontal (de valeurs) :
    que je veux mettre a la suite de la ligne de titres, c'est a dire que veux avoir:
    titrea titreb titrec 40 41 42 43
    (on laisse tomber la case vide entre titreb et titre c - je t'avais demandé ca parce que jen ai besoin a un moment de mon programme, mais bon, on separe les problemes, c'est plus simple comme ca :-)
    je fais comment?

    Merci beaucoup, vraiment, tu m'aides enormement, je bueugue sur ce probleme depuis pas mal de jours, et la en 2h tu m'as bcp fait avancer!!!!

  18. #18
    Invité
    Invité(e)
    Par défaut
    Et bien tu rajoutes autant de '\t' et '%d' que necessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [repmat('%s\t',1,nbcolonnes) '%d\t%d\t...\n']
    ou plus propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [repmat('%s\t',1,nbcolonnes)  '%4d\n']

    pour t'aider tu peux regarder la documentation de fprintf:
    Dernière modification par Invité ; 10/06/2010 à 18h17.

  19. #19
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    hehehe... j'ai trouvé toute seule pendant q tu me repondais,
    c'est peut etre pas tres joli mais ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %EN TETE
    fprintf(fid,[repmat('%s\t',1,nbcolonnes-1) '%s\t'],'titrea' , 'titreb', 'titrec');% Ecriture entête
    for g=1:length(truc)-1
        fprintf(fid,'%f\t',truc(g));
    end
    fprintf(fid,'%f\n',truc(end));
    Voila, avec tout ce que tu m'as donné comme indications je devrais pouvoir appliquer ca a mon vrai programme. Merci enormement encore, si j'ai d'autres questions je te redemanderai, mais la ca devrait etre bon!!! merci merci!!!!

  20. #20
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,
    Ca y est, j'ai reussi a faire mon programme en entier et il marche casiment casiment... a part pour un petit detail quand meme important:
    a un moment dans mon programme j'ai fait une boucle sur plusieurs lignes car sur une ligne je garde grace au fprintf succesivement des données en format %f, puis une "case" qui contient du texte, puis a nouveau des données en format %f...
    Bref: donc en gros j'ai besoin d'enregistrer mes string dans un vecteur colonne, comme ca je peux le mettre dns la boucle lui aussi.
    J'ai essayé plusieurs choses mais ca ne marche pas.

    Un exemple: si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    titres=sprintf('%s\n','bonjour','au revoir','oui','non');
    j'execute et ca rend bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    titres =
     
    bonjour
    au revoir
    oui
    non
    Mais quand je met ce vecteur colonne dans la boucle de mon programme, comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i = 1:6
    ...
    fprintf(fid,[repmat('%s\t',1,1) '%s\t'],titres(i));
    ...
    fclose(fid);
    en fait il m'ecrit:
    et d'ailleurs quand je tape
    dans la fenetre de commande il repond:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> titres(1)
     
    ans =
     
    b
    Comment est-ce que je peux faire pour lui demander qu'il me mette toute la chaine de caractere, que titres(1)=bonjour, titres(2)=au revoir, ect..?

    Merci d'avance!!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2015, 02h38
  2. Réponses: 3
    Dernier message: 26/12/2014, 09h35
  3. Réponses: 6
    Dernier message: 27/05/2014, 15h50
  4. Réponses: 2
    Dernier message: 06/04/2007, 12h30
  5. Comment enregistrer des graphiques pour le web?
    Par pepe2006 dans le forum Access
    Réponses: 1
    Dernier message: 11/10/2005, 21h08

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