matlab - Matlab:使用动态字段名编写 dicom 元数据
问题描述
我正在尝试将 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
MATLAB,您可以使用字符串访问动态结构字段:
mystruct.hello=1;
mystruct.('hello')=1; % equivalent.
做就是了:
meta.FractionGroupSequence.Item_1.ReferencedBeamSequence.(['Item_'num2str(j)']).ReferencedBeamNumber = j;
推荐阅读
- python - 如果一个数据框的值在另一个数据框中,如何获取行?
- javascript - 如何销毁视频
- r - 如何创建打开 .fasta 文件的函数?
- linux - Linux中shell程序的日志文件在哪里?
- r - 如何理解“prcomp”结果?'$ sdev'/'$ rotation'/'$ center'/'$ scale $ x'
- ubuntu - WSL 中的气流网络服务器错误:PermissionError:[Errno 1] 不允许操作:
- python - 使用列表中的 \n 连接列表中的字符串(Python)
- c - 为什么运行时会出现分段错误?它作为 TCP 客户端-服务器工作,并且在客户端的用户 ID 输入处发生分段错误
- php - POST ajax json 对 PHP 的响应
- javascript - JavaScript - 如何从 CSV 文件构建层次结构对象