我有一个格式为
的字符串数组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
那么,我该如何解决这个问题?
更新
我按照步骤
获得了sLine矩阵pFile = urlread('http://www.google.com/finance/historical?q=BVMF:PETR4&num=365&output=csv');
sLine = strsplit(pFile,'\n');
sLine(:,1)=[];
更新
感谢@Suever,我现在可以获得列日期。所以更新的代码的最后版本是
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 :(得分: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
单元格数组的最后一个元素为空,从而导致您的问题。在创建单元格数组以删除尾随换行符之前,您需要在strtrim
上使用pFile
。
sLine = strsplit(strtrim(pFile), '\n');
sLine(:,1) = [];