0

我有一个 matlab 单元格数组,其成员如下所示:

'abc201301.csv'
'avf201312.csv'
'sdffdsd201305.csv'
'wfeef201406.csv'
'ffgewgfw201106.csv'
'sdfdf201101.csv'
'wrrrt201009.csv'

我想在不使用 for 循环的情况下在数值矩阵中提取以下内容,因为该矩阵很大:

201301
201312
201305
201406
201106
201101
201009

我怎样才能做到这一点?

谢谢

4

2 回答 2

0

我有一个部分解决方案给你。您可以通过以下方式提取数字:

[~, remain] = strtok(str, ['1', '2', '3', '4', '5', '6', '7', '8', '9']);

这将返回保留数字 plus .csv,这是一个恒定长度的字符串,您应该可以直接通过 消除它remain = remain(1:end-4)。strtok 函数也可以在字符串元胞数组上调用,但它会返回一个元胞数组结果。为了在没有 for 循环的情况下访问元胞数组的内容,请参阅此Mathworks 讨论以了解一些语法概念。

我相信一定有办法让 strtok 只给你想要的结果(这样你就可以跳过删除.csv部分),所以我建议你自己玩一下(并查看文档)。

无论如何,我知道这不是一个完整的答案,但希望这可以为您提供完整解决方案所需的组件。

于 2013-09-24T14:46:52.517 回答
0

如果A是您的初始元胞数组,

B = regexpi(A,'\d{6}','match');
B = cellfun(@str2num,vertcat(B{:}));

应该做的伎俩。它将 6 位数字序列提取到单独的元胞数组中,然后将它们转换为单个数字数组。

于 2013-09-24T15:38:23.483 回答