Filter löschen
Filter löschen

Assign dates from cell array to matrix elements

2 Ansichten (letzte 30 Tage)
John Petersen
John Petersen am 26 Apr. 2012
I have a file I'll call testdoc.csv. It's in the format below:
header
site, date, time, parm1, parm2
1098,2/23/2012,0:00,18.5,20.6
1098,2/23/2012,1:00,18.5,20.6
1098,2/23/2012,2:00,18.5,20.6
1098,2/23/2012,3:00,18.5,20.7
I want to extract the date and time and put it in a six column vector. The "time" in the file is HH:MM. The procedure I have adopted is
d = importdata('testdoc.csv')
d =
data: [4x4 double]
textdata: {6x7 cell}
The textdata cell comes out like so
Columns 1 through 6
'header' [] [] [] []
'site' ' date' ' time' ' parm1' ' parm2'
'1098' '2/23/2012' '0:00' '' ''
'1098' '2/23/2012' '6:00' '' ''
'1098' '2/23/2012' '12:00' '' ''
'1098' '2/23/2012' '18:00' '' ''
I want to move the date and time to a matrix like
A = [day month year hours min sec]
so the first two rows in this case would be
2 23 2012 0 0 0
2 23 2012 6 0 0
Is there a way to re-assign the cell array to a matrix? I've tried
A = datevec([d.textdata{3:end,2} ' ' d.textdata{3:end,3}])
which works for a single element, but not for a vector of elements. I really want to avoid loops because of huge files.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 26 Apr. 2012
d1 = d.textdata(3:end,2:3)
out = datevec(strcat(d1(:,1),d1(:,2)),'mm/dd/yyyyHH:MM');

Weitere Antworten (1)

Jan
Jan am 26 Apr. 2012
C = textdata(3:end, 2:3);
S = sprintf('%s ', transpose(C));
D = sscanf(S, '%d/%d/%d %d:%d');
D = transpose(reshape(D, 5, []));
D(:, 6) = 0;
  1 Kommentar
John Petersen
John Petersen am 26 Apr. 2012
>> S=sprintf('%s ',transpose(C));
Error using sprintf
Function is not defined for 'cell' inputs.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Dates and Time finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by