技术论坛

 利用Variant参数数据类型实现获取数组大小/长度的FB“sizeOf

返回主题列表
作者 主题
'Razor
至圣

经验值:20115
发帖数:2773
精华帖:23
楼主    2019-11-12 22:53:44
主题:利用Variant参数数据类型实现获取数组大小/长度的FB“sizeOf

学习Variant,做了个小FB,调用获取数组的元素个数和元素类型:

主程序,

FB4接口,

FB4内部实现,数组支持的元素类型没有完全列出,可以在case... of语句下继续添加,

背景数据块,

测试数组来源数据块,

应用:

通过调用FB4获得数组的大小/长度,以及元素的类型,为后续对数组进行的一系列查找、计算、排序等操作打下了基础。


Less is more……
'Razor
至圣

经验值:20115
发帖数:2773
精华帖:23
4楼    2019-11-16 12:35:36
精华帖  主题:回复:利用Variant参数数据类型实现获取数组大小/长度的FB“sizeOf

多谢Z版指正,是我对指令的理解出现了错误,

就指令的描述看,使用VARIANT获取元素类型为bool的数组的元素个数有些力不从心,使用处理array[*]的求下限和上限的变量指令,LOWER_BOUND和UPPER_BOUND,倒是可行;两相比较,使用countOfElements指令可以不用指定数组元素类型(其实也隐式指定了BOOL以外的类型)和数组维度,使用起来简单,但是处理array[type of bool]时力有不及,得不出正确的数值,得到是以字节BYTE为基本单位的计数值(包含了填充元素);反观LOWER_BOUND和UPPER_BOUND指令,需要指定元素类型和数组维度,虽然稍显繁琐,却是能得到正确数值。我们权衡一下,如果已知数组的元素类型为BOOL,那还是使用ARRAY[*]、LOWER_BOUND和UPPER_BOUND方便,如果是BOOL类型以外的类型,还是使用CountOfElements指令划算些,毕竟一条指令就能覆盖很多类型。

Less is more……
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。