2016-07-15 163 views
1

我得到的格式Matlab的字符串轉換爲陣列

sLine = 
{ 
    [1,1] = 13-Jul-16,10.46,100.63,15.7,54.4,55656465 
    [1,2] = 12-Jul-16,10.47,100.64,15.7,54.4,55656465 
    [1,3] = 11-Jul-16,10.48,100.65,15.7,54.4,55656465 
    [1,4] = 10-Jul-16,10.49,100.66,15.7,54.4,55656465 
} 

的一個字符串數組,其中每個元素是一個字符串(「13-JUL-16,10.46,100.63,15.7,54.4,55656465」是串)。

我需要將其轉換爲6個載體,像

[a b c d e f] = ... 

這樣的方式,例如,對於第1列,這將是

a = [13-Jul-16;12-Jul-16;11-Jul-16;10-Jul-16] 

我試圖用cell2mat功能,但由於某些原因,它不會將字段分隔成矩陣元素,但它會將整個字符串連接成類似於

cell2mat(sLine) 
ans = 
    13-Jul-16,10.46,100.63,15.7,54.4,5565646512-Jul-16,10.47,100.64,15.7,54.4,5565646511-Jul-16,10.48,100.65,15.7,54.4,5565646510-Jul-16,10.49,100.66,15.7,54.4,55656465 

那麼,我該如何解決這個問題?

更新

我有以下步驟

pFile = urlread('http://www.google.com/finance/historical?q=BVMF:PETR4&num=365&output=csv'); 
sLine = strsplit(pFile,'\n'); 
sLine(:,1)=[]; 

更新

感謝@Suever我現在能拿列日的SLINE矩陣。因此,代碼的更新最新版本是

pFile = urlread('http://www.google.com/finance/historical?q=BVMF:PETR4&num=365&output=csv'); 
pFile=strtrim(pFile); 
sLine = strsplit(pFile,'\n'); 
sLine(:,1)=[]; 

split_values = regexp(sLine, ',', 'split'); 

values = cat(1, split_values{:}); 
values(:,1) 
+0

你不能用'cell2mat'因爲墊(數值矩陣)不能包含字符串。所以你需要使用單元陣列。你正在尋找的功能是'strsplit' – GameOfThrows

+0

我試過strsplit之前,但沒有成功。無論如何,我需要將該字符串轉換爲數值,以將每個數字列放入一個單獨的向量中。 – Rego

回答

2

你的數據是所有字符串,因此,你需要做一些字符串操作,而不是使用cell2mat

您需要分割,字符處的每個元素,然後將結果連接在一起。

sLine = {'13-Jul-16,10.46,100.63,15.7,54.4,55656465', 
     '12-Jul-16,10.47,100.64,15.7,54.4,55656465', 
     '11-Jul-16,10.48,100.65,15.7,54.4,55656465', 
     '10-Jul-16,10.49,100.66,15.7,54.4,55656465'}; 

split_values = cellfun(@(x)strsplit(x, ','), sLine, 'uniformoutput', 0); 
values = cat(1, split_values{:}); 

values(:,1) 

% { 
%  [1,1] = 13-Jul-16 
%  [2,1] = 12-Jul-16 
%  [3,1] = 11-Jul-16 
%  [4,1] = 10-Jul-16 
% } 

如果你希望它是更簡潔,我們可以只使用regexp給它,而不是分裂的strsplit起來,因爲它可以接受的單元陣列作爲輸入。

split_values = regexp(sLine, ',', 'split'); 
values = cat(1, split_values{:}); 

更新

與你發佈的代碼的問題是,有輸入一個尾隨的換行符,當你各執換行符您sLine單元陣列的最後一個元素是空的造成你的問題。在創建單元陣列以刪除尾隨換行符之前,您需要在pFile上使用strtrim

sLine = strsplit(strtrim(pFile), '\n'); 
sLine(:,1) = []; 
+1

哇,那很快。你代表食人魚:D – GameOfThrows

+0

謝謝你的快速回答。在我的情況下,在貓的電話中有一個尺寸不匹配的問題,我意識到我的sLine是你的調換。但即使轉置它也不能解決不匹配問題。我用確切的步驟更新了帖子以獲得我的sLine矩陣,它應該是我看不到的一個小細節。再次感謝。 – Rego

+0

@Rego更新了對你有問題的原因的描述 – Suever