vbs只支持2种类型的数组:其它的类型,如整数数组等,都不支持
1.普通数组Variant()
2.字节数组Byte()

(一)对于普通数组Variant()普通数组可分为“静态数组”和“动态数组”

静态数组又称“固定数组”,其维数和上界不可改变

动态数组可以调整其维数和上界,调整的次数没有限制
动态数组的维数和上界调小时,将会丢失被删除的元素的数据
初始状态的静态数组,每个元素的值都是Empty
初始状态的动态数组,没有数组元素

初始状态,是指已定义但尚未赋值,或者用Erase语句初始化后尚未赋值
最多支持64维数组,每一维的下界都是0,最小上界也是0
空数组的下界是0,上界是-1
初始状态的动态数组,没有下界和上界,如果读取其下界和上界就会报错
对于定义的普通变量,可以任意赋值为数组类型或非数组类型
对于已明确定义为数组类型的变量,不能赋值为其它类型

‘——————————————————————————-

数组类型不是指数组元素当前的数据类型
而是指数组元素可以赋值为什么类型
所以:
即使数组的元素全赋值为整数,但由于每个元素仍然可以赋值为其它类型
所以数组的元素的类型还是Variant,不是Integer
该数组还是Variant(),不是Integer()

‘示例:vbs不支持整数数组
Dim arr(2) ‘定义一个数组
arr(0) = CInt(0) ‘数组元素全赋值为整数
arr(1) = CInt(1)
arr(2) = CInt(2)
MsgBox VarType(arr) ‘8204
MsgBox TypeName(arr) ‘Variant()

(二)字节数组Byte()是vbs用来处理二进制数据的

比如Adodb.Stream对象以二进制数据形式读取的文件内容,就是Byte()
Msxml2.Xmlhttp对象以二进制数据形式读取的网页内容,也是Byte()

字节数组并不是真正的数组,所以其创建和读取并不能采用普通数组的读写方式

‘示例:创建及读取字节数组Byte()
Dim arrByte, i, s

With CreateObject(“Msxml2.DOMDocument”).CreateElement(“bin.hex”)
.DataType = “bin.hex” ’16进制
.Text = “3230313437353738” ’32是第一字节,30是第二字节
arrByte = .NodeTypedValue ‘生成一个字节数组
End With

MsgBox VarType(arrByte) ‘8209
MsgBox TypeName(arrByte) ‘Byte()

s = “”
For i = 1 To LenB(arrByte) ‘遍历字节数组
s = s & Right(“0” & Hex(AscB(MidB(arrByte, i, 1))), 2)
Next
MsgBox s ‘3230313437353738

【A】数组相关的语句和内部函数:Dim 定义变量
Public 定义公有变量
Private 定义私有变量
Erase 清空一个数组
ReDim 定义动态数组,或调整动态数组的维数和上界
Array 创建一个Variant()数组
Filter 在数组内搜索字符串
IsArray 判断目标是否为数组
Join 将数组的元素连接为一个字符串
LBound 返回数组的下界
Split 字符串拆分为数组
UBound 返回数组的上界

【B】数组相关的示例

‘示例:数组
Dim i ‘定义的普通变量

Dim a(3) ‘定义一个静态数组
Dim b() ‘Dim语句定义动态数组,必须没有上界
ReDim c(3) ‘ReDim语句定义动态数组,必须有上界

ReDim b(2) ‘调整动态数组上界
ReDim c(4, 3, 8) ‘同时调整数组上界和维数

b(0) = 2
ReDim b(4) ‘调整动态数组大小,不保留数据
MsgBox IsEmpty(b(0)) ‘True

b(0) = 2
ReDim Preserve b(5) ‘调整动态数组大小,保留数据
MsgBox b(0) ‘2

‘遍历数组,方式一
For i = 0 To UBound(b)
b(i) = i
Next

‘遍历数组,方式二
For Each i In b
MsgBox “数组元素:” & i
Next

‘定义的普通变量,可任意赋值为数组或非数组
i = “刘备·关羽”
i = Array() ‘空数组
i = “张飞·赵云”
MsgBox i

‘已明确定义为数组的变量,不可以再赋值为非数组
b = “孙悟空·猪八戒” ‘报错’验证数组的最大维数
Dim s, i

s = “Dim a(“
For i = 1 To 63
s = s & “0, “
Next
s = s & “0)”
MsgBox s ’64个0,即最大64维
ExeCute s ‘超过64,这行就会报错

Views: 63

Hi, I’m vbsgirl

办公职员