【发布时间】:2021-08-03 19:17:19
【问题描述】:
我正在尝试将 dicom 元信息写入 dicom 文件。在这里,字段名称会根据给定的元信息动态变化。
for j = 1:obj.pln.propStf.numOfBeams
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = j;'])
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDoseSpecificationPoint = [j,j,j];'])
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDose = j;'])
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamMeterset = j;'])
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDosePointDepth = j;'])
eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.BeamDosePointSSD = j;'])
end
正如您在meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = j; 中看到的那样,结构的字段名称会随着obj.pln.propStf.numOfBeams 中给出的光束数量而动态变化。
这种方法的问题是,如果我要尝试类似的东西:eval(['meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.Item_' num2str(j) '.ReferencedBeamNumber = 'TEST';'])。 eval 函数尝试查找文本“TEST”。
所以问题是,对于给定的问题是否有不同的方法而不是使用 eval?
【问题讨论】:
-
我很困惑。是的,如果你使用
eval('A'),eval 将尝试使用A。这很清楚。现在你的问题是什么?如何让eval不寻找A?好吧,不要在那里输入?它清楚你的代码问题是什么,但它根本不清楚你想要什么而不是。 eval 作为一个函数也是超级、超级、超级糟糕的,总有更好的选择。 -
在您的情况下,一个明确的替代方案是:
meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.(['Item_' num2str(j)']).ReferencedBeamNumber = j; -
您好@AnderBiguri Biguri,感谢您的快速回复。我正在寻找使用 eval 的替代方法。我尝试了 sprintf 但它给了你一个字符串。
-
我的第二条评论是 eval 的替代品,您可以按原样使用它。但是,它并不能解决您希望变量
TEST不存在时存在的事实,这是您提出的问题。 -
@AnderBiguri 非常感谢您,您的第二条评论有效并且是解决方案!抱歉,TEST 不是变量,它是文本。我只是忘记了''。对不起。