Skip to content

Tools - 数组工具类

cToolsArray - 数组操作工具

概述

提供数组操作相关的实用方法,包括删除元素、数组扩展、数组切片、数组解构等。

方法

Remove

从数组中删除指定索引的元素,后面的元素自动前移。

vb
Public Function Remove(ByRef Arr As Variant, ByVal Index As Integer) As Boolean

参数:

参数名类型说明
ArrVariant要操作的数组(ByRef 引用传递)
IndexInteger要删除的元素索引

返回值:

  • True - 删除成功
  • False - 删除失败(数组为空或索引越界)

示例:

vb
Dim Arr As Variant
Arr = Array("a", "b", "c", "d")

' 删除索引 1 的元素("b")
VBMAN.ToolsArray.Remove Arr, 1

' 结果: Arr = ["a", "c", "d"]
Debug.Print Join(Arr, ",")  ' 输出: a,c,d

Extend

将源数组的值扩展到目标数组。

vb
Public Property Let Extend(Vars As Variant, Value As Variant)

示例:

vb
Dim Target(0 To 2) As String
Dim Source As Variant
Source = Split("x/y/z", "/")

' 将 Source 的值赋给 Target
VBMAN.ToolsArray.Extend(Target) = Source

Debug.Print Target(0)  ' 输出: x

DeArray

解构数组到变量(将数组元素分别赋值给多个变量)。

vb
Public Sub DeArray(Arr As Variant, ParamArray OutVars())

参数:

参数名类型说明
ArrVariant源数组
OutVarsParamArray输出变量数组

示例:

vb
Dim A As String, C As String

' 将数组的第0个元素赋值给A,第2个元素赋值给C
VBMAN.ToolsArray.DeArray Split("a/b/c", "/"), A, , C

Debug.Print A  ' 输出: a
Debug.Print C  ' 输出: c

IsArrayEmpty

检查数组是否为空。

vb
Public Function IsArrayEmpty(Arr As Variant) As Boolean

返回值:

  • True - 数组为空
  • False - 数组不为空

示例:

vb
Dim EmptyArr() As Variant
Dim Arr As Variant
Arr = Array("a", "b")

Debug.Print VBMAN.ToolsArray.IsArrayEmpty(EmptyArr)  ' 输出: True
Debug.Print VBMAN.ToolsArray.IsArrayEmpty(Arr)       ' 输出: False

GetIndexByValue

根据值查找数组中的索引。

vb
Public Function GetIndexByValue(Arr As Variant, Value As String) As Long

参数:

参数名类型说明
ArrVariant要搜索的数组
ValueString要查找的值

返回值:

  • 找到则返回索引(从0开始)
  • 未找到返回 -1

示例:

vb
Dim Arr As Variant
Arr = Array("apple", "banana", "cherry")

Dim Index As Long
Index = VBMAN.ToolsArray.GetIndexByValue(Arr, "banana")
Debug.Print Index  ' 输出: 1

IsControlArray

检查控件是否为控件数组。

vb
Public Function IsControlArray(Ctl As Object) As Boolean

示例:

vb
' 检查 Command1 是否为控件数组
If VBMAN.ToolsArray.IsControlArray(Command1) Then
    Debug.Print "Command1 是控件数组"
End If

数组切片函数

SliceByteArray

处理 Byte 数组的切片。

vb
Function SliceByteArray(ByRef Arr() As Byte, ByVal StartPos As Long, Optional ByVal EndPos As Long = -1) As Byte()

参数:

参数名类型说明
ArrByte()源字节数组
StartPosLong起始位置(0-based)
EndPosLong结束位置(0-based),-1表示到末尾

示例:

vb
Dim ByteArray() As Byte
Dim Sliced() As Byte

ByteArray = StrConv("Hello-World", vbFromUnicode)
Sliced = VBMAN.ToolsArray.SliceByteArray(ByteArray, 0, 4)

' 输出切片结果
Dim i As Long
For i = LBound(Sliced) To UBound(Sliced)
    Debug.Print Chr(Sliced(i));  ' 输出: Hello
Next i

SliceString

处理 String 类型的切片。

vb
Function SliceString(ByVal Arr As String, ByVal StartPos As Long, Optional ByVal EndPos As Long = -1) As String

示例:

vb
Dim str As String
Dim sliced As String

str = "Hello World"
sliced = VBMAN.ToolsArray.SliceString(str, 0, 4)

Debug.Print sliced  ' 输出: Hello

SliceLongArray

处理 Long 类型数组的切片。

vb
Function SliceLongArray(ByRef Arr() As Long, ByVal StartPos As Long, Optional ByVal EndPos As Long = -1) As Long()

示例:

vb
Dim LongArr() As Long
Dim Sliced() As Long

LongArr = Array(10, 20, 30, 40, 50, 60, 70)
Sliced = VBMAN.ToolsArray.SliceLongArray(LongArr, 2, 5)

' 输出: 30, 40, 50, 60

字节数组操作函数

StringToByteArray

将字符串转为字节数组。

vb
Public Function StringToByteArray(ByVal St As String) As Byte()

示例:

vb
Dim Bytes() As Byte
Bytes = VBMAN.ToolsArray.StringToByteArray("Hello")

GetArrayLength

获取数组长度。

vb
Public Function GetArrayLength(Arr() As Variant) As Long

示例:

vb
Dim Arr As Variant
Arr = Array("a", "b", "c")
Debug.Print VBMAN.ToolsArray.GetArrayLength(Arr)  ' 输出: 3

FindByteArray

在字节数组中查找关键词字节数组的位置。

vb
Public Function FindByteArray(ByRef Arr() As Byte, ByRef Keyword() As Byte) As Long

返回值:

  • 找到返回起始位置(0-based)
  • 未找到返回 -1

示例:

vb
Dim Data() As Byte
Dim Keyword() As Byte

Data = StrConv("Hello World, Hello VB", vbFromUnicode)
Keyword = StrConv("World", vbFromUnicode)

Dim Pos As Long
Pos = VBMAN.ToolsArray.FindByteArray(Data, Keyword)
Debug.Print Pos  ' 输出: 6

SplitByteArray

将字节数组分割成两个数组。

vb
Public Function SplitByteArray(ByRef Arr() As Byte, ByVal Position As Long, Optional Offset As Long) As Variant

返回值:

返回包含两个字节数组的 Variant 数组:

  • 索引 0:前半部分
  • 索引 1:后半部分(从 Position + Offset 开始)

示例:

vb
Dim Data() As Byte
Dim Result As Variant

Data = StrConv("HelloWorldVB", vbFromUnicode)
Result = VBMAN.ToolsArray.SplitByteArray(Data, 5, 0)

' Result(0) = "Hello"
' Result(1) = "WorldVB"

SplitByteArrayByKeyword

根据关键词分割字节数组,支持多次分割。

vb
Function SplitByteArrayByKeyword(ByRef ByteArray() As Byte, ByVal Keyword As Variant, Optional ByVal SplitCount As Long) As Variant

参数:

参数名类型说明
ByteArrayByte()要分割的字节数组
KeywordVariant关键词(支持字符串或字节数组)
SplitCountLong分割次数,0表示分割所有

返回值:

返回 Variant 数组,每个元素是一个字节数组。

示例:

vb
Dim ByteArray() As Byte
Dim Keyword As String
Dim Result As Variant
Dim i As Long

ByteArray = StrConv("Hello World, This is a test. Hello World again!", vbFromUnicode)
Keyword = "World"

Result = VBMAN.ToolsArray.SplitByteArrayByKeyword(ByteArray, Keyword)

For i = LBound(Result) To UBound(Result)
    Debug.Print "Part " & (i + 1) & ": " & StrConv(Result(i), vbUnicode)
Next i

cToolsList - 记录集转换工具

概述

提供 ADODB.Recordset 与 Collection/Dictionary 之间的转换功能。

方法

RsToCollection

将 ADODB.Recordset 转换为 cCollection(字典数组)。

vb
Public Function RsToCollection(Obj As Variant) As cCollection

参数:

参数名类型说明
ObjVariantADODB.Recordset 对象

返回值:

返回 cCollection,其中每个元素是一个 Scripting.Dictionary,代表一条记录。

示例:

vb
Dim Rs As New ADODB.Recordset
Dim Coll As cCollection
Dim Row As Scripting.Dictionary

' 执行查询
Set Rs = Db.Execute("SELECT * FROM Users")

' 转换为集合
Set Coll = VBMAN.ToolsList.RsToCollection(Rs)

' 遍历结果
Dim i As Long
For i = 1 To Coll.Count
    Set Row = Coll(i)
    Debug.Print Row("UserName") & " - " & Row("Email")
Next i

说明:

  • 支持分页(保留原记录集的分页状态)
  • 支持过滤器(保留原记录集的 Filter)
  • 克隆记录集进行遍历,不影响原记录集位置

VB6及其LOGO版权为微软公司所有