loops - VBScript 创建一个多维数组并添加到其中?

标签 loops multidimensional-array vbscript

这对我来说太棒了哈哈,我几乎检查了 Google 搜索上的几乎每个页面,但我仍然不明白该怎么做。

我想在 VB 脚本中创建一个名为 data2 的多维数组。
尝试我看过的示例,但出现“下标超出范围”错误

Dim data2()

sub grabdata
    SQL_query = "SELECT * FROM MSAccess_table"
    Set rsData = conn.Execute(SQL_query)
    Do Until rsData.EOF = True
        ReDim Preserve data2(UBound(data2) + 1)
        data2(UBound(data2)) = Array(rsData("id"),rsData("column_1"),rsData("column_2"),rsData("column_3"),rsData("column_4"))
    rsData.moveNext 
    Loop
end sub

基本上我正在尝试学习如何在 VB 脚本中创建一个多维数组并用循环添加到它。有哪些基本示例适用于我的情况?

最佳答案

(1) 将 ADO 结果集转化为二维数组的最佳方法是使用 .GetRows方法。那么你的问题就消失了。

(2) VBScript 中有两种数组。 已修复 数组是通过指定它们的 UBounds 来声明的:

Dim aFix(2, 3)

它们无法调整大小。 动态 可以通过 ReDim [Preserve] 更改数组.创建这样一个数组的最好方法是
ReDim aDyn(2, 3)

如果你知道起始尺寸,或者
Dim aDyn : aDyn = Array()

如果你想从一个空的开始。问题 22 是:您只能将 Preserve 用于最后一个维度。

(3) 你的
Dim data2()

是可憎的——一个没有大小的固定数组。可惜'编译器'太笨了,抓不到VBScript无法正确处理的野兽:
>> Dim data2()
>> WScript.Echo UBound(data2)
>>
Error Number:       9
Error Description:  Subscript out of range
Dim a()的肮脏声明被后面的 ReDim 隐藏将存储适当的 动态数组到该变量中:
>> Dim data2() ' <-- abomination
>> ReDim data2(1,1) ' <-- overwritten by a dynamic array
>> data2(0,0) = 0
>> ReDim Preserve data2(1,5) ' last dimension increased; 'old' data preserved
>> data2(1,5) = 1
>> WScript.Echo data2(0,0), data2(1,5)
>>
0 1

更新 wrt jmbpiano 的评论:

(1) 我提供了证据表明你不能得到一个用 () 变暗的变量的 UBound,所以我坚持我的说法,这些野兽是可憎的。只需查看问题(或 this one ),就会发现使用 () 会给您带来麻烦。

(2) 我说你应该用ReDim a(KnownUbound) “声明”一个已知大小的动态数组,但我没有证明这个习语的“Option Explicit”兼容性。所以 :
Option Explicit
ReDim a(4711)
ReDim b(4,7,1,1)
a(0) = "qed"
b(0,0,0,0) = "qed"
WScript.Echo b(0,0,0,0)

输出:
cscript 19888987.vbs
qed

关于loops - VBScript 创建一个多维数组并添加到其中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888987/

相关文章:

regex - 根据 VBScript 中的正则表达式拆分字符串

php - 避免硬编码嵌套 foreach 循环

python - 在 Python 中,什么会导致 for 循环的值随机倒退?

ruby - 将 CSV 文件转换为哈希数组

java - 递归地替换二维数组中的内部数组

scripting - 使用 VBScript 读取 CSV 文件

java - 使用 indexOf() 两次未能检测到第二个字符的出现

matlab - 在 MATLAB 中使用 if 语句组合另外两个矩阵来创建新矩阵

ios - JSON 到多维数组

command-line - 通过 VBS 带参数运行命令行