Matlab - 动态访问数据结构的一部分

时间:2018-01-16 13:00:12

标签: matlab

我有一个数据结构A.B.C ,我想从导入csv文件填充的单元格数组中动态读取对象名称,从而访问它的一些部分。

For example, my data structure has following fields A.B.C
within B are B1, B2, B2, B3, B4, B5
within C are field_1, field_3, field_3
Names cell array with all the possibilities for B, imported from cvs

我想为每个B案例动态访问field_2 。 我从csv文件中导入了名称,并尝试传递名称:

A.(Names(1,1)).field_2

但收到错误

'Argument to dynamic structure reference must evaluate to a valid field name.'

当我打印数组的单个名称时,撇号就在那里。例如,Names(1,1)返回'B1'而不是B1

如何绕过撇号? 或者它是引用对象的更好方法吗?

1 个答案:

答案 0 :(得分:1)

我建立了emzet的评论,并提供了一个可重复的示例,展示了它的工作原理。这是重新创建结构的代码:

A = struct();
A.B1 = struct();
A.B2 = struct();
A.B3 = struct();
A.B4 = struct();
A.B1.field_1 = 'testB1C1';
A.B1.field_2 = 'testB1C2';
A.B1.field_3 = 'testB1C3';
A.B1.field_4 = 'testB1C4';
A.B2.field_1 = 'testB2C1';
A.B2.field_2 = 'testB2C2';
A.B2.field_3 = 'testB2C3';
A.B2.field_4 = 'testB2C4';
A.B3.field_1 = 'testB3C1';
A.B3.field_2 = 'testB3C2';
A.B3.field_3 = 'testB3C3';
A.B3.field_4 = 'testB3C4';

NamesB = {'B1', 'B2', 'B3' ,'B4'};
NamesC = {'field_1', 'field_2', 'field_3' ,'field_4'};

现在,正如你所说,做到这一点:

A.(NamesB(1)).(NamesC{1}) 

将返回错误:

Argument to dynamic structure reference must evaluate to a valid field name.

如果你这样做,而是:

A.(NamesB{1}).(NamesC{1}) % notice the curly braces after NamesB.

ans =

'testB1C1'

将提供正确的价值。