我有一个数据结构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
如何绕过撇号? 或者它是引用对象的更好方法吗?
答案 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'
将提供正确的价值。