我有一个.csv文件,格式如下所示:
mapping.csv
5188.40811,TMobileML
5131.40903,TMobileGregsapt
5119.40791,TMobileJonsapartment
5123.40762,TMobileRedhat
我想将它存储在一个4乘2的数组中,当我有一个像5131.40903
这样的值时(这是一个'字符串'而不是'int'),我想找到映射关系{ {1}}。但我遇到两个问题,第一个是我不能使用TMobileGregsapt
,它会有一些错误:
(我认为当我使用csvread时问题可能是csvread('mapping.csv')
5131.40903
,但int
是一个字符串......)
TMobileGregsapt
即使我使用??? 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);
,它仍有一些错误:
dlmread('cell4.csv', ',')
第二个问题是如何以简单的方式找到映射关系,天真的方法是使用forloop来找到数组的位置。
感谢您的帮助:)
答案 0 :(得分:7)
csvread和dlmread都只适用于数字数据。这样的事情对你有用
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)
答案 1 :(得分:2)
如果您使用混合文本/数字csv但是您不知道格式是什么,或者它是异构的,那么另一个答案将起作用,使用'{3}}中的'csv2cell'函数
c = csv2cell( 'yourFile.csv', 'fromfile');
c(1, :)
会显示您的标题,c(2:end, k)
会为您提供每个列(没有标题),for k = 1:size(c, 2)