明经通道 发表于 2012-10-24 18:33:58

第六章 使用变体和安全数组 (二) Visual LISP安全数组函数

第六章 使用变体和安全数组
Visual LISP安全数组函数

(vlax-make-safearray type dim1 …)
创建一个安全数组,其数据类型为type,维度范围dim1,以此类推,可以指定额外的维度。不管什么原因,如果操作失败,语句将返回nil。

参数:
Type – 数据类型(整数或枚举)
Dim1 – 第一维数组(一维数组)
Dim2 – (可选)第二维维数(二维数组)等。

示例:
(setq sa (vlax-make-safearray vlax-vbDouble ‘(0 . 2)))
创建一个双精度的单维数组,它可容纳三个不同的元素(0,1,2)。

(setq sa (vlax-make-safearray vlax-vbString ‘(0 . 1) ‘(1 . 3)))
创建一个字符型二维数组,第一维包含两个元素,由索引0开始。第二给包含三个元素,由索引1开始。

提示!要填充安全数组,可使用(vlax-safearray-fill)还是(vlax-safearray-put-element)来填充,至于使用哪个填充,可根据用户是否需要一次只指定一个元素或一次性指定所有元素来决定。

(vlax-safearray->list symbol)
如果symbol包含安全数组,元素将转换为LISP LIST数据类型被返回。如果symbol不包含安全数组,会产生错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Symbol – 包含安全数组的符号

(vlax-safearray-type symbol)
如果symbol包含安全数组,元素的数据类型将以枚举结果返回(整数值)。这将可匹配整数或枚举结果(查看附录X有关数据类型枚举)。如果symbol不包含安全数组,将产生错误。

参数:
Symbol – 包含安全数组的符号

示例:
(setq sa (vlax-make-safearray vlax-vbdouble ‘(0 . 3)))
(vlax-safearray-type sa)
返回5(双精度),相当于vlax-vbDouble

(vlax-safearray-fill safearray ‘element-values)
指定值给安全数组内的多个元素。如果提供的参数不是一个数组,将返回ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray      安全数组类型的对象
Element-values      一个存储于数组中的值列表,你可以指定与数组中元素一样多的值。如果你指定的数值少于元素个数,剩余的元素保留他们当前值或为空。对于多维数组,element-values必须是列表的列表,每一列表对应数组的一维。

示例:
创建一个双精度值的单维数组:
_$ (setq myarray (vlax-make-safearray vlax-vbdouble '(0 . 2)))
#<safearray...>
使用vlax-safearray-fill来填充数组元素值:
_$ (vlax-safearray-fill myarray '(1 2 3))
#<safearray...>
列出数组包含的值以校验元素值:
_$ (vlax-safearray->list myarray)
(1.0 2.0 3.0)

(vlax-safearray-get-element safearray element )
返回安全数组中指定元素的值,element的值是整数,表示在该数组中要取得的索引位置。如果safearray参数非安全数组对象,将产生ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray –安全数组类型的对象
Element – 整数,指要取得的索引位置

示例:
_$ (setq sa (vlax-make-safearray vlax-vbString '(1 . 2) '(1 . 2) ))
#<safearray...>
使用vlax-safearray-put-element来填充数组:
_$ (vlax-safearray-put-element sa 1 1 "A")
"a"
_$ (vlax-safearray-put-element sa 1 2 "B")
"b"
_$ (vlax-safearray-put-element sa 2 1 "C")
"c"
_$ (vlax-safearray-put-element sa 2 2 "D")
"d"
使用vlax-safearray-get-element来检索数组第一维的第二元素:
_$ (vlax-safearray-get-element sa 1 1)
”A”
_$ (vlax-safearray-get-element a 2 2)
”D"

(vlax-safearray-put-element safearray element value)
在安全数组中指定新值给单个元素。如果safearray参数不是安全数组对象,将产生ActiveX错误。如果提供的元素值不能与数组中的数据类型相匹配,将返回ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray         安全数组类型的对象
Element         指向你将指定值的元素所在位置的系列索引值。对于一维数组,指定一个索引值,对于二维数组,指定两个索引值,以此类推。
Value         指定给每个元素的值。在数组中要指定不同的值给数组中个别的元素,要分开调用独立的值来对应不同的元素位置。

示例:
_$ (setq sa (vlax-make-safearray vlax-vbString '(1 . 2) '(1 . 2) ))
#<safearray...>
使用vlax-safearray-put-element来填充数组:
_$ (vlax-safearray-put-element sa 1 1 "A")
"A"
_$ (vlax-safearray-put-element sa 1 2 "B")
"B"
_$ (vlax-safearray-put-element sa 2 1 "C")
"C"
_$ (vlax-safearray-put-element sa 2 2 "D")
"D"
你也可以用vlax-safearray-fill函数来填充数组值,以下的函数调用能和三个vlax-safearray-put-element调用一样完成同样的任务:
(vlax-safearray-fill sa '(("A" "B") ("C" "D")))

(vlax-safearray-get-dim safearray)
返回给定安全数组中的维数(数组维数的数字)。如果给定的参数不是数组,将返回ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray 安全数组类型的对象

示例:
_$ (setq myarray (vlax-make-safearray vlax-vbinteger '(2 . 5)))
#<safearray...>
_$ (vlax-safearray-get-dim myarray)
2

(vlax-safearray-get-l-bound safearray dim)
返回指定数组的维数下界(整数值)。如果给定的参数不是数组,将返回ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray – 安全数组类型的对象
Dim – 整数,数组的第几维,第一维为1

示例:
以下示例是求以下所定义的安全数组的下界值:
(vlax-make-safearray vlax-vbString '(1 . 2) '(0 . 1) ))
取得数组第一维的起始索引值(下界):
_$ (vlax-safearray-get-l-bound tmatrix 1) 1

(vlax-safearray-get-u-bound safearray dim)
返回指定数组维度的上界(整数值)。如果指定的参数不是数组,将返回ActiveX错误。你需要将对该函数的调用封装到错误捕获内以使这个错误能得到适当处理。

参数:
Safearray – 安全数组类型的对象
Dim – 整数,数组的第几维,第一维为1。

(setq sa (vlax-make-safearray vlax-vbString '(1 . 2) '(0 . 1) ))
_$ (vlax-safearray-get-u-bound sa 1)
2
第一维的上界的索引值为2。

取得数组第二维的上界索引值,其值为1:
_$ (vlax-safearray-get-u-bound sa 2) 1




http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 明经通道的微博

zyhandw 发表于 2012-10-25 08:47:31

继续来学习

smartstar 发表于 2012-10-26 12:55:42

向老大致敬!

ltrliu 发表于 2015-8-11 11:11:43

认真学习中

xmzhangzhilin 发表于 2018-4-28 10:51:05

以前一直没搞懂变体和安全数组,学习之后明白了很多,感谢

丶吟游诗人灬 发表于 2023-4-8 14:11:15

后面的内容相对好理解
页: [1]
查看完整版本: 第六章 使用变体和安全数组 (二) Visual LISP安全数组函数