首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(1) | 引用(0) | 阅读3337次
VB6 空数组UBOUND

On Error GoTo s
Dim aa() As String
Debug.Print UBound(aa)
aa = Split("", ",")
Debug.Print UBound(aa)
aa = Split("1,2,3", ",")
Debug.Print UBound(aa)
Erase aa
Debug.Print UBound(aa)
Exit Sub
s:
    Debug.Print Err.Number, Err.Description
第一个和最后一个  DEBUG.PRINT 导致错误: 9  下标越界;因为这个数组是空数组
第二个返回 -1,因为这个数组是没有值的
第三个返回 2,因为是从0~2

我找不到判断 空数组的方法。用isempty()或isnull()也不能正常返回正常的值

BAIDU找到一个方法:可以利用错误陷阱判断数组是否为空。比如当一个数组为空时,使用UBOUND函数将引发下标错误,只要我们捕获到所触发的错误就可以判断出数组是否为空了。这个就不用说了。

LBound 返回一个 Long 型数据,其值为指定数组维可用的最小下标 函数与 UBound 函数一起使用,用来确定一个数组的大小。UBound 用来确定数组某一维的上界
Erase 重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。
Join函数 返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。

能否判断动态数组有没有被分配过?     选择自 northwolves 的 Blog
动态数组在VB语言中常能起到出奇制胜的作用。但数组有没有被重新定义或释放,用“is empty”,“is null”,“=" "”等方法都不起作用。所以判断时一般采用侦别错误消息(ON ERROR )的方法。下面给出一个非错误侦别的代码,判断动态字符串数组的分配情况:
Function hasredim(ByRef x() As String) As Boolean  '定义布尔函数
Dim temp As String
temp = Join(x, ",")
hasredim = LenB(temp) > 0 '空数组长度为零
End Function

但是这个方法有个问题:
Dim aa() As String
ReDim aa(0)
Debug.Print LenB(Join(aa, ","))
同样返回是0

还有一个问题:如果数组类型不是STRING或不能转换为STRING类型呢?这样就不行了.所以我一般是在程序开始处REDIN A(0),用的时候判断UBOUND(A)=0,如果是就说明还没用过,否则用过我的数据是从下标1开始存放的


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/VB6UBLUNDARYERR9.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1119342633

2005年6月21日16:30星期二  [Dev开发] 追踪此文的RSS
HK Polar Bear在 2007年3月1日14:16星期四 评论:
Very Good and Practical!Emotion
Yippee 回复于 2007年3月1日20:00
:)

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告
Fire and Motion!

统计信息
[Yippee]||[统计]||日志:1790
在线: 24||用户: 2562 [列表]
今日:2173||到访:2671672
Rss:838446||评论:1584

最新日志

最新评论

友情链接

日历

最新引用

搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8