null - 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?
根据文档 aTagGroup
的类型为 0。这对于我的示例不正确。如图所示,Acquisition有子项,因此它的类型应该是 0,但它的类型应该是 3。(大多数)其他索引也是如此。类型 3 是长的。
(实际上我写了自己的 dummy 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
?
编辑:示例数据可以在这个后续问题帖子中找到
解决方案
使用“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...
命令返回一个布尔值,指示操作成功或失败。
推荐阅读
- multithreading - 使用来自多处理池的 Keras 模型预测函数
- java - 如何使用 Apache POI 在 word 文档中定义窄边距?
- powershell - Powershell:如何管道阵列本身而不是其项目
- amazon-web-services - Packer:如何使用具有不同 kms 密钥的多个块设备创建 AWS AMI
- ios - iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同
- javascript - 使用javascript的上下滚动按钮不起作用
- php - PhpSpreadSheet :写入特定的工作表
- laravel-5 - 如何从其他表中获取方法中的数据?
- performance - Hashicorp 保险库在并发负载上的性能问题
- node.js - 轮播卡无法使用对话流