Tools - 数组工具类
cToolsArray - 数组操作工具
概述
提供数组操作相关的实用方法,包括删除元素、数组扩展、数组切片、数组解构等。
方法
Remove
从数组中删除指定索引的元素,后面的元素自动前移。
vb
Public Function Remove(ByRef Arr As Variant, ByVal Index As Integer) As Boolean参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Arr | Variant | 要操作的数组(ByRef 引用传递) |
Index | Integer | 要删除的元素索引 |
返回值:
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,dExtend
将源数组的值扩展到目标数组。
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) ' 输出: xDeArray
解构数组到变量(将数组元素分别赋值给多个变量)。
vb
Public Sub DeArray(Arr As Variant, ParamArray OutVars())参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Arr | Variant | 源数组 |
OutVars | ParamArray | 输出变量数组 |
示例:
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 ' 输出: cIsArrayEmpty
检查数组是否为空。
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) ' 输出: FalseGetIndexByValue
根据值查找数组中的索引。
vb
Public Function GetIndexByValue(Arr As Variant, Value As String) As Long参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Arr | Variant | 要搜索的数组 |
Value | String | 要查找的值 |
返回值:
- 找到则返回索引(从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 ' 输出: 1IsControlArray
检查控件是否为控件数组。
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()参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Arr | Byte() | 源字节数组 |
StartPos | Long | 起始位置(0-based) |
EndPos | Long | 结束位置(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 iSliceString
处理 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 ' 输出: HelloSliceLongArray
处理 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) ' 输出: 3FindByteArray
在字节数组中查找关键词字节数组的位置。
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 ' 输出: 6SplitByteArray
将字节数组分割成两个数组。
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参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
ByteArray | Byte() | 要分割的字节数组 |
Keyword | Variant | 关键词(支持字符串或字节数组) |
SplitCount | Long | 分割次数,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 icToolsList - 记录集转换工具
概述
提供 ADODB.Recordset 与 Collection/Dictionary 之间的转换功能。
方法
RsToCollection
将 ADODB.Recordset 转换为 cCollection(字典数组)。
vb
Public Function RsToCollection(Obj As Variant) As cCollection参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Obj | Variant | ADODB.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)
- 克隆记录集进行遍历,不影响原记录集位置