DM-Script:提取变量/未知结构的标签组
我的任务似乎非常简单:使用
TagGroup
并将树结构和
未知
结构的数据提取到结果日志中。因此,我想获取名称和值以及要在结果中显示的所有子项的名称和值。我该怎么做?
我有以下(示例)标签结构:
文档介绍了
TagGroup
,还包含一个使用
TagGroupGetTagType()
的示例。然后可以使用返回的值来查找结构。我编写并执行了以下脚本:
for(number i = 0; i < tg.TagGroupCountTags(); i++){
String label = tg.TagGroupGetTagLabel(i);
number type = tg.TagGroupGetTagType(i, 0);
result("\nName: " + label + ", Type: " + type);
}
结果为
Name: Acquisition, Type: 3 // <- should be 0?
Name: Calibration, Type: 3
Name: DataBar, Type: 3 // <- should be 0?
Name: GMS Version, Type: 3 // <- should be 0?
Name: Microscope Info, Type: 3 // <- should be 0?
Name: Session Info, Type: 3 // <- should be 0?
根据文档,
TagGroup
的类型为 0。这对于我的示例来说并不正确。如图所示,
Acquisition
有子项,因此它应该具有类型 0,但它的类型为 3。其他索引(大多数)也一样。类型 3 是 long。
(实际上,我编写了自己的虚拟
TagGroup
。我用我知道的数据类型填充它,然后测试了返回值
TagGroupGetTagType()
。为此,文档似乎是正确的。)
我更改了脚本,以始终强制检查标签组是否有子项,假设
TagGroupCountTags()
将为空标签返回 0,但事实并非如此:
void showTags(tg){
for(number i = 0; i < tg.TagGroupCountTags(); i++){
String label = tg.TagGroupGetTagLabel(i);
number type = tg.TagGroupGetTagType(i, 0);
result("\nName: " + label + ", Type: " + type);
TagGroup child_tg;
tg.TagGroupGetIndexedTagAsTagGroup(i, child_tg);
// if(child_tg != NULL){ // <- this does not work either
showTags(child_tg);
// }
}
}
此脚本崩溃是因为
child_tg
在某些时候为
null
。但我也无法测试
null
,因为不允许进行比较(
错误“无法将此参数列表与任何现有函数匹配”
)。
文档始终知道其标签结构,因此它们仅使用路径来获取其值。我还尝试寻找其他方法,以了解
TagGroup
是否有子级。但似乎没有
hasChildren()
或任何等效函数。那么如何获取
TagGroup
的结构?
编辑:示例数据可在此 后续问题帖子
中找到所以我找到了某种答案。我现在正在使用
try{
showTags(child_tg);
}
catch{
break;
}
这有效,但我仍然不太满意。有没有办法与
null
进行比较或检查对象类(是否有某种
instanceof
)?
使用“IsValid()”方法测试任何脚本对象是否为“NULL”。这可能看起来很奇怪(NULL 怎么会有方法?)但这就是它的工作原理。
因此,您有:
-
image img
-->img.ImageIsValid()
-
imageDocument doc
-->doc.ImageDocumentIsValid()
-
ROI r
-->r.ROIIsValid()
-
TagGroup tg
-->tg.TagGroupIsValid()
- 等等。等等。
-
还有:
object ob
-->ob.ScriptObjectIsValid()
但解决您的问题的一个更简单的方法是使用:
TagGroup child_tg;
if ( tg.TagGroupGetIndexedTagAsTagGroup(i, child_tg) )
showTags(child_tg);
Get...
命令返回一个布尔值,表示操作成功或失败。