单元格字符串数组操作

时间:2016-04-22 23:30:03

标签: matlab cell-array

我有一个包含以下格式字符串的单元格:

data = {'para1_left = numeric value';'para1_right = numeric value';
        'para2_left = numeric value';'para2_right = numeric value';
        ........
        'para100_up = numeric value';'para100_down = numeric value';
         and so on...I have a few hundreds of these};

我想要从这个单元格中取出两个单元格:一个只有参数名称p_name,另一个只有值p_val。

一旦我有两个单元格,我想比较p_name单元格与另一个较短长度的单元格。这个新单元格将具有以下格式的字符串:

new_cell = {'para1';'para5';'para10';...'para25'};

基本上这些字符串会错过尾随部分:_left,_right等。

然后,我希望得到p_name的索引列表,其中包含new_cellindx_match = [1;2;10;20....and so on]中的任何字符串,以便我可以通过以下方式获取匹配参数名称的值做p_val{indx_match}

我想用最少的行数完成上述操作,可能使用cellfun。我想出了如何使用strfind命令查找索引,但是它创建了一个单元格数组,p_val{indx_match}没有工作(我尝试了cellfun的各种方法,但没有成功了。)

1 个答案:

答案 0 :(得分:0)

我不确定你想要什么,但这应该让你走上正轨。

Org = {'a_l = 5'; 'a_r = 7'; 'b_l = 6'; 'b_r = 7'};
Shr = {'a'};
splt = cellfun(@(s) strsplit(s, {'=', ' '}), Org, 'uni', 0);
p_name = cellfun(@(c) c{1}, splt, 'uni', 0);
p_val = cellfun(@(c) str2num(c{2}), splt);
param = cellfun(@(c) strsplit(c, '_'), p_name, 'uni', 0);
param = cellfun(@(c) c{1}, param, 'uni', 0);
index = cellfun(@(s) strfind(param, s), Shr, 'uni', 0);