2011-09-29 36 views
3

如何访问动态字段名的结构如下路径:Matlab的动态字段名的结构与电池阵列

var = 'refxtree.CaseDefinition.FlowSheetObjects.MaterialStreamObjects{8}.MaterialStreamObjectParams.Pressure.Value.Text'; 

fields = textscan(var,'%s','Delimiter','.'); 

refxtree.(fields{:})不会因为MaterialStreamObjects工作包含单元阵列,而我要访问的第8单元格,然后继续沿着结构路径走下去。

最后我想获取并设置字段值。

+0

'refxtree(场{:})'止跌即使在那里没有单元阵列也不行。 – Jonas

回答

0

您需要建立适当的输入到subsref,可能使用substruct。看看MATLAB的帮助。

+0

在[这个答案](http://stackoverflow.com/a/16718354/232888)有一个很好的例子['subsref'](http://www.mathworks.co.uk/help/matlab/ ref/subsref.html)和['substruct'](http://www.mathworks.de/de/help/matlab/ref/substruct.html)函数,这些函数可能很容易被改进以完成问题的要求。 – quazgar

0

您可以定义一个匿名函数来导航表格top.field1.field2.field3{item}.field4.field5.field6.field7这种特殊类型的结构(作为一个方面:真的有必要有这样一个复杂的结构?)。

getField = @(top,fields,item)top.(fields{1}).(fields{2}).(fields{3}){item}.(fields{4}).(fields{5}).(fields{6}).(fields{7}) 

setField = @(top,fields,item,val)subsasgn(top.(fields{1}).(fields{2}).(fields{3}){item}.(fields{4}).(fields{5}).(fields{6}),struct('type','.','subs',fields{7}),val); 

通过调用

fieldValue = getField(refxtree,fields,8); 
setField(refxtree,fields,8,newFieldValue); 

注意fields需要有七个要素使用的功能。如果要概括以上,则必须动态地创建上述功能

0

在这种情况下,很容易只使用EVAL:

str = 'refxtree.CaseDefinition.FlowSheetObjects.MaterialStreamObjects{8}.MaterialStreamObjectParams.Pressure.Value.Text'; 

%# get 
x = eval(str) 

%# set 
evalc([str ' = 99']);