Matlab的字符串转换为阵列
我得到的格式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)
你的数据是所有字符串,因此,你需要做一些字符串操作,而不是使用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) = [];
哇,那很快。你代表食人鱼:D – GameOfThrows
谢谢你的快速回答。在我的情况下,在猫的电话中有一个尺寸不匹配的问题,我意识到我的sLine是你的调换。但即使转置它也不能解决不匹配问题。我用确切的步骤更新了帖子以获得我的sLine矩阵,它应该是我看不到的一个小细节。再次感谢。 – Rego
@Rego更新了对你有问题的原因的描述 – Suever
你不能用'cell2mat'因为垫(数值矩阵)不能包含字符串。所以你需要使用单元阵列。你正在寻找的功能是'strsplit' – GameOfThrows
我试过strsplit之前,但没有成功。无论如何,我需要将该字符串转换为数值,以将每个数字列放入一个单独的向量中。 – Rego