当文件中的内容有不同的格式时,如何使用“csvread”?

时间:2012-05-17 04:07:23

标签: matlab file-io csv

我有一个.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来找到数组的位置。

感谢您的帮助:)

2 个答案:

答案 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)