How to read csv files in matlab as you would in R?

user2005253 picture user2005253 · Jan 23, 2013 · Viewed 7.1k times · Source

I have a data set that is saved as a .csv file that looks like the following:

Name,Age,Password
John,9,\i1iiu1h8
Kelly,20,\771jk8
Bob,33,\kljhjj

In R I could open this file by the following:

X = read.csv("file.csv",header=TRUE)

Is there a default command in Matlab that reads .csv files with both numeric and string variables? csvread seems to only like numeric variables.

One step further, in R I could use the attach function to create variables with associated with teh columns and columns headers of the data set, i.e.,

attach(X)

Is there something similar in Matlab?

Answer

Colin T Bowers picture Colin T Bowers · Jan 23, 2013

Although this question is close to being an exact duplicate, the solution suggested in the link provided by @NathanG (ie, using xlsread) is only one possible way to solve your problem. The author in the link also suggests using textscan, but doesn't provide any information about how to do it, so I thought I'd add an example here:

%# First we need to get the header-line
fid1 = fopen('file.csv', 'r');
Header = fgetl(fid1);
fclose(fid1);

%# Convert Header to cell array
Header = regexp(Header, '([^,]*)', 'tokens');
Header = cat(2, Header{:});

%# Read in the data
fid1 = fopen('file.csv', 'r');
D = textscan(fid1, '%s%d%s', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);

Header should now be a row vector of cells, where each cell stores a header. D is a row vector of cells, where each cell stores a column of data.

There is no way I'm aware of to "attach" D to Header. If you wanted, you could put them both in the same structure though, ie:

S.Header = Header;
S.Data = D;