Matlab字符串转换为数组

时间:2016-07-15 14:07:40

标签: string matlab split octave

我有一个格式为

的字符串数组
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)

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) = [];