2012-05-17 12 views
3

我有一個.csv文件和格式如下所示:如何在文件中的內容具有不同格式時使用「csvread」?

mapping.csv

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

我想將它存儲在一個4乘2陣列,當我有作爲5131.40903這樣一個值(這是一個'字符串'而不是'int'),我想找到映射關係,它是TMobileGregsapt。但我滿足兩個問題,第一個是我不能使用csvread('mapping.csv'),它會產生一些錯誤: (我認爲這個問題可能是5131.40903int當我使用csvread,但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', ','),它仍然有一些錯誤:

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

第二個問題是我如何能找到以簡單的方式映射關係,天真的方法是使用一個for循環,找到位置數組。

感謝您的幫助:)

回答

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) 
+0

感謝您的幫助! – LoveTW

+0

'nums'和'strs'的類型是什麼?一個字符串或一個字符數組?因爲我不能使用'str2num(nums)'... – LoveTW

2

另一個答案工作,將工作,如果你有混合的文本/數字CSV但你要麼不知道格式是什麼,或者它的異類,使用從「csv2cell」功能:http://www.mathworks.com/matlabcentral/fileexchange/20836-csv2cell

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

c(1, :)會給你的頭和c(2:end, k)會給你每列(SANS頭)的,for k = 1:size(c, 2)

相關問題