2016-07-15 127 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