【问题标题】:VBScript Array issue [duplicate]VBScript数组问题[重复]
【发布时间】:2019-07-28 09:05:04
【问题描述】:

我正在尝试创建一个动态数组以供以后用于获取多个数值的中位数。我有以下内容:

Dim DaysArray(), i, val1, val2

Sub BuildArray
    i = 0
    ...

    While Not recordset.EOF
        ReDim Preserve DaysArray(i)
        DaysArray(i) = recordset(value)
        i = i + 1
    Wend

    ...
End Sub

Sub ShowArrayValue
    ...

    Array.Sort(DaysArray)
    If DaysArray.Length Mod 2 <> 0 Then 
        Response.Write DaysArray(DaysArray.GetUpperBound(0)\2) 
    Else 
        val1 = DaysArray(DaysArray.Length\2)
        val2 = DaysArray((DaysArray.Length\2) - 1)
        Response.Write (val1 + val2)\2 
    End If
    ...
End Sub

但是,在通过循环的第一次迭代中,我在 Array.Sort(DaysArray) 行上得到“需要对象:数组”?

【问题讨论】:

  • 如果记录集是 ADODB 记录集,您也可以考虑使用GetRows 方法自动将数据返回为二维数组
  • 这个例子毫无意义 - recordset.value,在某处你缺少对字段的引用 - recordset("thefieldname").Value,假设这是一个 ADODB.Recordset 对象引用。
  • 您显示的代码应该在 每次 迭代中引发该错误,b/c 在该代码中的任何一点都没有定义数组的实际大小。 Dim DaysArray()“定义”了一个数组没有大小并且永远不应该在任何地方使用(正如我所讨论的here)。如果你想要一个动态大小的 VBScript 数组:使用 ReDim DaysArray(-1) 定义一个空的动态数组,然后在你的循环中调整它的大小,例如像这样:ReDim Preserve DaysArray(UBound(DaysArray)+1)。请注意这种方法固有的性能问题。

标签: arrays dynamic vbscript


【解决方案1】:

您需要使用ReDim Statement 例如如下:

Dim DaysArray(), i, val1, val2

Sub BuildArray
i = 0
'...
While Not recordset.EOF
    ReDim Preserve DaysArray(i)
    DaysArray(i) = recordset.value
    recordset.MoveNext
    i = i + 1
Wend
'...
End Sub

ReDim 声明

声明动态数组变量,并分配或重新分配存储 过程级别的空间。

语法

ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .

参数

  • Preserve 当您更改最后一个维度的大小时,将数据保留在现有数组中。
  • varname 变量名;遵循标准变量命名约定。

  • subscripts 数组变量的维数;最多可以声明 60 个多维。下标参数使用以下 语法:upper [,upper] . . .

数组的下界始终为零。

【讨论】:

  • 谢谢约瑟夫。这让我克服了那个错误。现在我在 Sub ShowArrayValue 中收到错误“Object required: Array” - Array.Sort(DaysArray)。
  • @M.Hondros VBScript 不包含任何类似于Array Object (Windows Scripting - JScript) 的本机内容。
猜你喜欢
  • 2016-12-23
  • 2013-12-16
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2019-02-17
相关资源
最近更新 更多