LoveTW
LoveTW

Reputation: 3832

How to use "csvread" when the contents in the file have different formats?

I have a .csv file and the format is shown below:

mapping.csv

5188.40811,TMobileML
5131.40903,TMobileGregsapt
5119.40791,TMobileJonsapartment
5123.40762,TMobileRedhat

i want to store it in an 4 by 2 array, when i have a value such as 5131.40903(this is a 'string' not 'int'), i want to find the mapping relation which is TMobileGregsapt. But i meet two problem, the first is i can't use csvread('mapping.csv'), it will have some error: (I think the problem might be 5131.40903 will be int when i use csvread, but TMobileGregsapt is a string...)

??? Error using ==> dlmread at 145
Mismatch between file and format string.
Trouble reading number from file (row 1, field 2) ==> TMobi

Error in ==> csvread at 52
    m=dlmread(filename, ',', r, c);

even though i use dlmread('cell4.csv', ','), it still have some error:

??? Error using ==> dlmread at 145
Mismatch between file and format string.
Trouble reading number from file (row 1, field 2) ==> TMobi

The second problem is how can i finding the mapping relation in easy way, the naive method is using a forloop to find the position of array.

Thanks for your help:)

Upvotes: 3

Views: 26808

Answers (2)

Matt S.
Matt S.

Reputation: 898

Another answer that will work if you have mixed text/numeric csv but you either don't know what the format is, or it's heterogeneous, use the 'csv2cell' function from: http://www.mathworks.com/matlabcentral/fileexchange/20836-csv2cell

c = csv2cell( 'yourFile.csv', 'fromfile'); 

c(1, :) will give your headers and c(2:end, k) will give you each of the columns (sans the header), for k = 1:size(c, 2)

Upvotes: 2

Mauro
Mauro

Reputation: 1241

Both csvread and dlmread only work for numeric data. Something like this should work for you

out=textread('tmp.csv', '%s', 'whitespace',',');
nums =  out(1:2:end);
strs =  out(2:2:end);
% find index of 'TMobileGregsapt'
ind = find(strcmp('TMobileGregsapt',strs));
nums(ind)

Upvotes: 7

Related Questions