首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab字符串到数组的转换

Matlab字符串到数组的转换
EN

Stack Overflow用户
提问于 2016-07-15 14:07:40
回答 1查看 55关注 0票数 1

我得到了一个格式的字符串数组

代码语言:javascript
复制
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-7月-16,10.46,100.63,15.7,54.4,55656465”是字符串)。

我需要把这个转换成6个向量,就像

代码语言:javascript
复制
[a b c d e f] = ...

例如,对于第一列,它将是

代码语言:javascript
复制
a = [13-Jul-16;12-Jul-16;11-Jul-16;10-Jul-16]

我尝试使用cell2mat函数,但出于某种原因,它没有将字段分隔为矩阵元素,而是将整个字符串连接成如下所示

代码语言:javascript
复制
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矩阵

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

更新

多亏了@Suever,我现在才能得到专栏的日期。所以更新后的最后一个版本的代码是

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 14:11:14

您的数据都是字符串,因此您需要执行一些字符串操作,而不是使用cell2mat

您将希望在,字符处拆分每个元素,然后将结果连接在一起。

代码语言:javascript
复制
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,因为它可以接受单元格数组作为输入。

代码语言:javascript
复制
split_values = regexp(sLine, ',', 'split');
values =  cat(1, split_values{:});

更新

您已经发布的代码的问题是,输入中有一个尾随的换行符,当您在换行符上拆分时,sLine单元格数组的最后一个元素将导致您的问题。在创建单元格数组以删除尾随换行符之前,您需要在pFile上使用pFile

代码语言:javascript
复制
sLine = strsplit(strtrim(pFile), '\n');
sLine(:,1) = [];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38398194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档