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 :

Transformation date et heure


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Transformation date et heure
    Bonjour,

    Pour mon travail je dois me servir de MATLAB mais le problème est que je suis un débutant complet en la matière.
    J'utilise des données Excel pour les traiter sous MATLAB et il faut que je fasse comprendre une date du type 2011-05-18T06:50:00 à MATLAB

    Comment dois-je procéder? J'ai pensé à une commande du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    an = input('Quelle année voulez vous mettre au format ?)');
    meteo=datenum(S.textdata(:,5),'yyyy-mm-dd"T"h:mm:ss'); %transformation des dates
    (les dates sont en colonne 5 de mon fichier Excel)

    Merci d'avance

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

    C'est en anglais qu'il faut spécifier le format : aaaa yyyy
    heures-minutes-secondes en majuscules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datenum(S.textdata(:,5),'yyyy-mm-ddTHH:MM:SS')

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oulà merci beaucoup, j'ai changé à temps le aaaa (faute de frappe)
    mais j'ai mis des guillemets autour du T pensant que ça changerait un truc mais visiblement non...

    Pouvez vous m'expliquer ces 2 lignes s'il vous plait? Je dois me servir d'un code de mon "chef" Désolé de trop en demander


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    colhead='Date UTC   Niveau eau(mm)';
    filename1 = [cd,'\Meteo\Instantanee_Compterendu_2011.dat']
    dlmwrite(filename1,colhead,'delimiter','','-append');
    dlmwrite(filename1,meteo,'delimiter', '\t','precision','%7.3f','-append');

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename1 = [cd,'\Meteo\Instantanee_Compterendu_2011.dat']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename1 = fullfile(pwd,'\Meteo\Instantanee_Compterendu_2011.dat')
    Voir Comment concaténer le nom d'un fichier et celui d'un répertoire ?

    La ligne dlmwrite(filename1,colhead,'delimiter','','-append'); écris le contenu de colhead à la fin du fichier.
    La ligne dlmwrite(filename1,meteo,'delimiter', '\t','precision','%7.3f','-append'); écrit chaque donnée meteo séparées par une tabulation, et sous le format %7.3f.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide!

    Rebonjour, j'ai un problème pour afficher 2 graphiques ayant en abscisse le temps (à des échelles différentes)
    Pour un graphique ça marche assez bien mais pour 2 bof..


    Je vous envoie mon code :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    clear all
     
    filename = input ('taper le nom du fichier','s')
    arquivo = [cd,'\Meteo\',filename]
    S = uiimport(arquivo);
     
    filename2 = input ('taper le nom du fichier','s')
    arquivo2 = [cd,'\Meteo\',filename2]
    T = uiimport(arquivo2);
    J'ouvre 2 bases de données différentes



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    meteo(:,1)=datenum(S.textdata(:,5),'yyyy-mm-ddTHH:MM:SS'); %transformation des dates
    meteo(:,1)=meteo(:,1)+S.data(:,1)./24; % transformation des dates
    meteo(:,2)=S.data(:,6); % Niveau d'eau
    meteo2(:,1)=datenum(T.textdata(:,5),'yyyy-mm-ddTHH:MM:SS'); %transformation des dates
    meteo2(:,1)=meteo2(:,1)+T.data(:,1)./24; % transformation des dates
     
    meteo2(:,2)=T.data(:,1); % Précipitations
    Je crée 2 tableaux différents l'un météo1 et l'autre météo2 qui ont en abscisse le temps à deux échelles différentes

    % Décalage horaire - Transformation UTC/Heure locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    meteo(:,1)=meteo(:,1)-0.125; % 
    meteo2(:,1)=meteo2(:,1)-0.125; %
    Je convertis le temps dans les colonnes temps dans meteo et meteo2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    colhead='Date UTC   Niveau eau(mm)';
    filename1 = [cd,'\Meteo\Instantanee_Compterendu_2011.dat']
    dlmwrite(filename1,colhead,'delimiter','','-append');
    dlmwrite(filename1,meteo,'delimiter', '\t','precision','%7.3f','-append');
     
     
    colhead2='Date UTC   Précipitations(mm)';
    filename2 = [cd,'\Meteo\Instantanee_Compterendu_2011-2.dat']
    dlmwrite(filename2,colhead2,'delimiter','','-append');
    dlmwrite(filename2,meteo2,'delimiter', '\t','precision','%7.3f','-append');
    Pour mettre en forme le futur graphique
    % Traçage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    b = input ('Début de la simulation (dd/mm/yyyy)-1 jour:','s');
    f = input ('Fin de la simulation (dd/mm/yyyy))+ 1 jour:','s');
     
    begin = datenum(b,'dd/mm/yyyy');
    final = datenum(f,'dd/mm/yyyy');
     
     
    figure(1)
    Pour ne garder que certaines données des 2 tableaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % Niveau d'eau 
    subplot(5,1,1),plot(meteo(:,1),meteo(:,2),'.')
    datetick('x',0,'keepticks')
    xlim([begin final]);
    ylim([-10 200]);
    ylabel('Niveau eau','FontSize',14,'FontWeight','bold');
     
     
    % Précipitations
    subplot(5,1,2),plot(meteo2(:,1),meteo2(:,2),'.')
    datetick('x',0,'keepticks')
    xlim([begin final]);
    ylim([0, 10]);
    ylabel('Précipitations','FontSize',14,'FontWeight','bold');

    Je trace les 2 courbes dans une même fenêtre subplot



    L'erreur est la suivante :

    Attempted to access meteo2(:,2); index out of
    bounds because size(meteo2)=[867,1].

    Error in niveaueau (line 26)
    meteo2(:,1)=meteo2(:,2)+T.data(:,1)./24; %
    transformation des dates


    Merci d'avance! Je pense que créer 2 tableaux 2 fenêtres différentes comme ça ne marche pas bien mais bon ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comme le précise l'erreur : size(meteo2)=[867,1] tu ne peux donc pas utiliser meteo2(:,2)Parce que tu fixes cette colonne à la ligne suivante.

    Dans les 3 lignes précédentes, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    meteo(:,1)=datenum(S.textdata(:,5),'yyyy-mm-ddTHH:MM:SS'); %transformation des dates
    meteo(:,1)=meteo(:,1)+S.data(:,1)./24; % transformation des dates
    meteo(:,2)=S.data(:,6); % Niveau d'eau
    Donc je pense à la même chose ?
    Dernière modification par Invité ; 12/08/2012 à 15h35. Motif: Fusion

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oui merci beaucoup j'avais fait une faute de frappe j'ai corrigé entre les 2 messages
    Bon maintenant il n'y a plus d'erreur mais le graphique n'apparait pas comme je l'aimerais. De plus j'aimerais que certaines dates apparaissent en abscisse dans les 2 graphiques
    http://www.noelshack.com/2012-21-133...Sanstitre1.jpg

    Quelle peut être l'erreur?

    J'ai corrigé le code au dessus

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je soupçonne un soucis de limite des axes. Inspire-toi de la deuxième partie de la FAQ.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Ok je continue à bien avancer grâce à toi

    Comment récupérer la première et la dernière abscisse du graph tracé?
    x(begin) et x(final) dans mon cas?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Dans ton cas tu traces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(meteo2(:,1),meteo2(:,2),'.')
    donc les abscisses sont contenues dans la première colonne meteo2(:,1)Il te reste à récupérer le premier et dernier élément

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    J'ai bien avancé, mon programme fonctionne parfaitement !

    Maintenant il faut que j'exporte les données dans un fichier .txt, sauriez vous comment faire? En mettant des titres

    De plus j'aimerais que la 1ere colonne du type 23/05/2011 09:10 apparaisse exactement sous la forme yyyy mm dd hh mm sur le fichier txt


    Ah et comment supprimer tout ce qu'il y a dans un fichier texte par matlab?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Un peu de lecture : Quelles sont les fonctions de lecture et écriture ?
    n'hésite pas à regarder plus précisément la documentation des fonctions présentées en tapant sur MATLAB :

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Maintenant il me faudrait créer un tableau avec des strings et des nombres

    J'ai pensé à utiliser la faq matlab sur les cellules mais j'avoue que ça manque de clarté.

    Ce qui me faudrait c'est un moyen de créer un cell array avec en colonne 2 à 8 des nombres enregistrés dans un autre tableau double. En 1ere colonne je devrai écrire un même string rentré dans la variable NOM.

    Comment procéder? Merci encore une fois !!!

  14. #14
    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,

    as-tu essayé de coder quelque chose? si oui peux-tu nous le montrer?

    Cet exemple de la est quand même assez explicite sur la façon de remplir un tableau de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x{1,1} = 10;
    x{2,1} = rand(5,4,3);
    x{1,2} = 'MATLAB';
    x{2,2} = {'salut';'au revoir'};

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oui bien sûr j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    C = cell(1:f2,9); %je crée une matrice assez grande
    C(:,1) = {nomfichier}; %en colonne 1 j'écris le string compris dans nomfichier
    C(b2:f2,2:8) =  {precip(b2:f2,3:9)} % sur certaines lignes, des colonnes 2 à 8 je recopie ce qu'il y a dans mon tableau de nombre precip

    ça ne donne absolument rien

    Edit : avec les accollades autour de C ça met une erreur

  16. #16
    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
    Pour la création, il faut rentrer des nombres, pas des vecteurs :
    Ensuite le remplissage de la première colonne est correcte.
    Pour la dernière ligne, il faut créer autant de cellules qu'il y'a de nombre dans ton tableau, pour cela il y a la fonction mat2cell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C(b2:f2,2:8) = mat2cell(precip,ones(1,length(b2:f2)),ones(1,length(2:8)));
    Plus de détails dans la documentation.

  17. #17
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Argh maintenant j'ai mon tableau de cellules parfait C

    Et la fonction dlmwrite ne fonctionne pas !! J'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dlmwrite(filename1,C{1},'delimiter', '\t','precision','%7.3f','-append');

    cette fonction ne marche qu'avec les matrices de double?

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Est-ce possible de mettre dans une cellule des données de nature différente? Parce que quand je transfère les données matlab sous excel j'ai d'horribles tab entre les données que mon logiciel hydraulique ne lit pas!!!!!!!!!!!



    Edit :
    L'erreur ne venait pas de là... En fait mon logiciel accepte les données du genre 3.5 mais pas 3,5. Ca commence à me faire péter un câble tout ça LOL

    Merci de votre patience (votre patience est certainement plus grande que la mienne vu les cas comme moi qui existent) Je pense que je n'aurai plus trop de problème :p

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

Discussions similaires

  1. [XL-2007] Transformer une saisie de 3 chiffres en date et heure
    Par apt dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/01/2015, 15h23
  2. transformer date/heure avec SchiftDateTime
    Par campia dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 10/12/2008, 14h33
  3. Réponses: 27
    Dernier message: 05/09/2008, 00h07
  4. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 15h09
  5. [XSL] Transformation DATE
    Par Phenolphtaleine dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/06/2004, 15h57

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