Lettura di data e ora dal file CSV in MATLAB

datetime, M01, M02, M03, M04, M05, M06 8/15/2009 0:00, 5.8, 7.8, 7.8, 7.3, 0, 7.9 8/15/2009 0:10, 7.1, 8.1, 8.1, 7.7, 0, 8.1 8/15/2009 0:20, 6.8, 7.4, 7.6, 7.1, 0, 7.3 8/15/2009 0:30, 5.6, 6.8, 7.1, 6.6, 0, 6.8 8/15/2009 0:40, 3.9, 6.2, 6.4, 6.2, 0, 6.4 8/15/2009 0:50, 4.6, 5.5, 6.1, 5.8, 0, 5.6 8/15/2009 1:40, 7, 7, 7.2, 6.9, 0, 6.3 

Puoi aiutarmi a leggere correttamente questo file CSV in modo da poter convertire la prima colonna in una stringa usando il datenum ? naturalmente, naturalmente, non funziona. Con textcan ho perso il modo di chiamarlo, quindi non ho errori. La data e l’ora sono nella stessa colonna.

Scusa potrebbe sembrare una domanda stupida !!!

So leggere ora il file sopra. ma come faccio a scriverlo in un file.txt nello stesso identico formato ?? Voglio dire, ho modificato alcune colonne e ora ho bisogno di un file simile con lo stesso formato per la colonna 1 e la riga 1. Grazie per l’aiuto

Secondo il tuo commento sopra, se i dati sono simili:

 datetime, M01, M02, M03, M04, M05, M06 8/15/2009 0:00, 5.8, 7.8, 7.8, 7.3, 0, 7.9 8/15/2009 0:10, 7.1, 8.1, 8.1, 7.7, 0, 8.1 8/15/2009 0:20, 6.8, 7.4, 7.6, 7.1, 0, 7.3 8/15/2009 0:30, 5.6, 6.8, 7.1, 6.6, 0, 6.8 8/15/2009 0:40, 3.9, 6.2, 6.4, 6.2, 0, 6.4 8/15/2009 0:50, 4.6, 5.5, 6.1, 5.8, 0, 5.6 8/15/2009 1:40, 7, 7 7.2, 6.9, 0, 6.3 

quindi usa quanto segue per leggerlo come una matrice:

 fid = fopen('file.csv', 'rt'); a = textscan(fid, '%s %f %f %f %f %f %f', ... 'Delimiter',',', 'CollectOutput',1, 'HeaderLines',1); fclose(fid); format short g M = [datenum(a{1}) a{2}] 

… e l’output ottengo:

 M = 7.34e+005 5.8 7.8 7.8 7.3 0 7.9 7.34e+005 7.1 8.1 8.1 7.7 0 8.1 7.34e+005 6.8 7.4 7.6 7.1 0 7.3 7.34e+005 5.6 6.8 7.1 6.6 0 6.8 7.34e+005 3.9 6.2 6.4 6.2 0 6.4 7.34e+005 4.6 5.5 6.1 5.8 0 5.6 7.34e+005 7 7 7.2 6.9 0 6.3 

se imposti il formato di visualizzazione su un output lungo, vedrai i numeri interi (nota che sono ancora memorizzati per intero), oppure usa fprintf :

 fprintf('%.9f\n', M(:,1)) 
 734000.000000000 734000.006944445 734000.013888889 734000.020833333 734000.027777778 734000.034722222 734000.069444445 

TEXTSCAN di per sé non convertirà la data, ma puoi chiamare DATENUM solo sulla colonna che ne ha bisogno.

 f = fopen('datafile.txt'); data = textscan(f, '%s %f %f %f %f %f %f', 'Delimiter', ',', 'HeaderLines', 1); fclose(f); data{1} = datenum(data{1}); 

restituirà un array di data di doppi in cui la prima colonna è il datum MATLAB corrispondente a ciascuna data e ogni altra colonna è la colonna corrispondente dal file.