51Testing软件测试论坛

标题: QTP中的array变量 [打印本页]

作者: rxiaofan    时间: 2007-1-29 10:58
标题: QTP中的array变量
在QTP的脚本中,可不可以定义一个长度可变的数组变量,如Dim Variable_Name_Array()。

我的程序是这样的:
Dim i,Variable_Name_Array()
For i = 0 to 5
        Variable_Name_Array(i) = i
        MsgBox  Variable_Name_Array(i)
Next

程序报错,Subscript out of range。

是不是数组变量不能这么定义啊?
作者: 风过无息    时间: 2007-1-29 11:11
指定一下Variable_Name_Array()的大小,
Dim i,Variable_Name_Array(6)
For i = 0 to 5
        Variable_Name_Array(i) = i
        MsgBox  Variable_Name_Array(i)
Next
作者: rxiaofan    时间: 2007-1-29 11:16
我知道固定长度的数组是可以的,但是我就是希望这个数组的长度是可变的,因为每次执行这个脚本,我的数组长度都是不一样的。
作者: m_2    时间: 2007-1-29 11:45
标题: 回复 #3 rxiaofan 的帖子
你好,动态分配当然可以。只不过前提是每次执行这个脚本的时候,你能不能得到这个数组的长度。如果可以的话,就可以按照下面的代码试试。
Dim i
Dim Variable_Name_Array()
Dim Variable_Length      '用于保存每次执行这个脚本的时候,这个数组的长度。
ReDim Variable_Name_Array(Variable_Length)
If Variable_Length >=5
  For i = 0 to 5
        Variable_Name_Array(i) = i
        MsgBox  Variable_Name_Array(i)
  Next
End If

希望你帮你解决问题。
作者: 风过无息    时间: 2007-1-29 12:08
ReDim语句 在过程级别中使用,用于为动态数组变量重新分配存储空间。 语法 ReDim[Preserve]varname(subscripts)[Astype][,varname(subscripts)[Astype]]... ReDim语句的语法包括以下几个部分: 部分描述 Preserve可选的。关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。 varname必需的。变量的名称;遵循标准的变量命名约定。 subscripts必需的。数组变量的维数;最多可以定义60维的多维数组。subscripts参数使用下面的语法: [lowerTo]upper[,[lowerTo]upper]... 如果不显式指定lower,则数组的下界由OptionBase语句控制。如果没有OptionBase语句则下界为0。 type可选的。变量的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String*length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的Astype子句。对于包含数组的Variant而言,type描述的是该数组的每个元素的类型,不能将此Variant改为其它类型。 说明 ReDim语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的Private、Public或Dim语句声明过的动态数组的大小。 可以使用ReDim语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用ReDim将该数组改为其它数据类型,除非是Variant所包含的数组。如果该数组确实是包含在某个Variant中,且没有使用Preserve关键字,则可以使用Astype子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。 如果使用了Preserve关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。 ReDimX(10,10,10) ... ReDimPreserveX(10,10,15) 同样地,在使用Preserve时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。 如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。 在初始化变量时,数值变量被初始化为0,变长的字符串被初始化为一个零长度的字符串(""),而定长的字符串则用0填充。Variant变量被初始化为Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用Set语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值Nothing,这个值表示该变量没有指向任何对象的实例。 小心如果ReDim语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了OptionExplicit,ReDim也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把ReDim作为声明语句使用,而只应作为重定义数组大小的语句。 注意要改变Variant所包含的数组的大小,必须在试图改变其数组大小之前显式声明该Variant变量。
作者: rxiaofan    时间: 2007-1-29 12:19
谢谢谢谢m_2 ,谢谢谢谢楼上们的解答!
作者: walker1020    时间: 2007-2-2 20:27
ReDim 的用法在QTP的帮助文件里面有,还是看帮助吧.




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2