0

I'm trying to read a csv file that contains data in format:

02/01/2012  03/01/2012  04/01/2012  05/01/2012  06/01/2012 09/01/2012 10/01/2012
1w  0.652   0.626   0.606   0.584   0.564   0.546   0.53
2w  0.738   0.716   0.7 0.68    0.662   0.645   0.628
3w  0.845   0.826   0.808   0.785   0.762   0.746   0.734
1m  1.005   0.988   0.97    0.951   0.93    0.912   0.894
2m  1.165   1.152   1.137   1.122   1.105   1.092   1.083
3m  1.343   1.333   1.319   1.303   1.288   1.276   1.267
4m  1.425   1.416   1.403   1.387   1.372   1.362   1.355

I've read the posts: How to use "csvread" when the contents in the file have different formats?

Reading date and time from CSV file in MATLAB

but I still cannot figure out how to read first row that contains strings representing dates and convert it into matlab date format.

1

1 Answer 1

4

Try the following:

%# open file for reading
fid = fopen('file.csv', 'rt');

%# read first line and extract date strings
dt = textscan(fgetl(fid), '%s');

%# read the rest of the data
D = textscan(fid, '%s %f %f %f %f %f %f %f', 'CollectOutput',1);

%# close file
fclose(fid);

%# convert to serial date numbers
dt = datenum(dt{1}, 'mm/dd/yyyy')

%# place data in individual cells
D = [D{1} num2cell(D{2})]

The result:

dt =
      734900
      734929
      734960
      734990
      735021
      735113
      735143
D = 
    '1w'    [0.652]    [0.626]    [0.606]    [0.584]    [0.564]    [0.546]    [ 0.53]
    '2w'    [0.738]    [0.716]    [  0.7]    [ 0.68]    [0.662]    [0.645]    [0.628]
    '3w'    [0.845]    [0.826]    [0.808]    [0.785]    [0.762]    [0.746]    [0.734]
    '1m'    [1.005]    [0.988]    [ 0.97]    [0.951]    [ 0.93]    [0.912]    [0.894]
    '2m'    [1.165]    [1.152]    [1.137]    [1.122]    [1.105]    [1.092]    [1.083]
    '3m'    [1.343]    [1.333]    [1.319]    [1.303]    [1.288]    [1.276]    [1.267]
    '4m'    [1.425]    [1.416]    [1.403]    [1.387]    [1.372]    [1.362]    [1.355]
Sign up to request clarification or add additional context in comments.

1 Comment

Cool. I had to modify it slightly ( add 'Delimiter' etc) but I got the idea! Thanks a lot!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.