快捷搜索:

VB超频快餐,让我一次用个够!(五)

另辟途径处置惩罚字符串中的字符:字节数组法

当要处置惩罚字符串中的每一个字符时,可以将字符串赋值到一个byte数组中进行操作。要记着:每一个Unicode字符对应双字节。这种措施平日要快许多,由于节省了大年夜量的Mid$函数操作以及大年夜量的临时字符串空间。下面的代码是统计字符串中空格数目的最快措施

Dim b() as Byte, count As Integer

b() = source$

For i = 0 to UBound(b) Step LenB("A")

If b(i) = 32 Then count = count + 1

Next

请留意上面代码中LenB()函数的特殊用法:在VB4(32位)、VB5和VB6中它返回数值2, 在VB4(16位)中返回数值1。是以,我们就可以应用同一代码段,而无需#If编译指令。

快速清除数组部分内容

清除动态数组的最快措施是应用ReDim,清除静态数组则是应用删除。然则假如只想清除数组的一部分内容,怎么办呢?看上去彷佛只能应用For-Next轮回了。

假如处置惩罚的是数字数组,有一个较快的措施。它基于ZeroMemory API函数,正如函数名所示,它能将一块内存区域添补为0。看看怎么利用这个函数来清除一个Long类型数组的一部分内容:

Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As _

Any, ByVal Bytes As Long)

’定义数组,添补数据

Dim a(1000) As Long

For i = 1 To UBound(a)

a(i) = i

Next

’从a(200)开始清除100个元素内容

ZeroMemory a(200), 100 * Len(a(1))

请留意上述代码中清除长度的表示措施,应用Len()函数包管了当数组类型改变期间码仍旧有效。

快速初始化Variant和String类型数组

VB中没有供给定义数组并同时初始化其内容的措施,以是大年夜多半环境下,必须零丁地设置每一个元素,就象下面一样:

Dim strArray(0 To 3) As String

strArray(0) = "Spring"

strArray(1) = "Summer"

strArray(2) = "Fall"

strArray(3) = "Winter"

在VB4、VB5和VB6中,可以应用Array()函数随意创建一个Variants类型数组:

Dim varArray() As Variant

varArray() = Array("Spring", "Summer", "Fall", "Winter")

但却没有同样的函数能创建非Variant类型数组。然则我们发明,在VB6中可以应用Split()函数创建字符串数组:

Dim varArray() As String

’由Split建立的数组下标平日是从0开始的

varArray() = Split("Spring;Summer;Fall;Winter", ";")

在VB6中,同样能充分使用函数返回数组的能力,创建数组初始化法度榜样段。比如下面的代码段:

Function ArrayInt(ParamArray values() As Variant) As Integer()

Dim i As Long

ReDim res(0 To UBound(values)) As Integer

For i = 0 To UBound(values)

res(i) = values(i)

Next

ArrayInt = res()

End Function

同时,也可以创建一个子法度榜样段来检测通报给它的数值的类型,并返回精确类型的数组。这种环境下,函数应该定义为返回Variant。

造访简单变量老是快于数组元素值

读写数组中的元素速率平日都慢于造访一个简单变量,是以,假如在一个轮回中要重复应用同一数组元素值,就应该分配数组元素值莅临时变量中并应用这个变量。下面举一个例子,检测整数数组中是否存在重复项:

Function AnyDuplicates(intArray() As Integer) As Boolean

’假如数组包孕重复项,返回True

Dim i As Long, j As Long,

Dim lastItem As Long

Dim value As Integer

’只谋略机UBound()一次

lastItem = UBound(intArray)

For i = LBound(intArray) To lastItem

’ 保存intArray(i)到非数组变量中

value = intArray(i)

For j = i + 1 To lastItem

If value = intArray(j) Then

AnyDuplicates = True

Exit Function

End If

Next

Next

’没有发明重复项

AnyDuplicates = False

End Function

上述法度榜样有2层轮回,经由过程缓存intArray(i)的数值到一个通俗的、非数组变量中,节省了CPU运行光阴。经测试,这将前进80%的速率。

创建新表时,快速拷贝字段

在VB6中,无需脱离开拓情况就可以创建新的SQL Server和Oracle表。措施很简单:打开DataView窗口,用鼠标右键单击数据库的表文件夹,再选择新表格菜单敕令。

当处置惩罚相似表格时,便是说具有许多相同字段的表格,我们完全可以在很短的光阴内容完成设定操作。详细步骤是:在设计模式下打开源表格,加亮选摘要拷贝字段对应的行,按Ctrl-C拷贝信息到粘贴板;然后,在设计模式打开目标表格,将光标置于要粘贴字段所在的位置,按Ctrl-V。

这样,就拷贝了所有的字段名称以及它们所带的属性。

您可能还会对下面的文章感兴趣: