Reputation: 3832
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
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
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