Vbscript 为什么我的阵列在退出循环时会丢失所有数据

Vbscript 为什么我的阵列在退出循环时会丢失所有数据,vbscript,Vbscript,这是我在这里的第一篇帖子,但阅读其他帖子帮助我解决了无数问题。你们太棒了。所以,感谢你们到目前为止提供的所有帮助,并提前感谢你们在这里给我的任何建议 所以,我正在编写这个脚本,它将从数组中的列表中随机选择数字。在本节中,我试图读取numberStoryArray第三维度的每个元素中的数字,并将第二维度中相应的数字(第三维度中指示的次数)写入numberDump数组。我还让它写入一个文本文件,只是为了看看它是否正常工作,如果我遇到其他问题,需要知道输出是什么,就可以引用它 编辑 NumberHis

这是我在这里的第一篇帖子,但阅读其他帖子帮助我解决了无数问题。你们太棒了。所以,感谢你们到目前为止提供的所有帮助,并提前感谢你们在这里给我的任何建议

所以,我正在编写这个脚本,它将从数组中的列表中随机选择数字。在本节中,我试图读取
numberStoryArray
第三维度的每个元素中的数字,并将第二维度中相应的数字(第三维度中指示的次数)写入
numberDump
数组。我还让它写入一个文本文件,只是为了看看它是否正常工作,如果我遇到其他问题,需要知道输出是什么,就可以引用它

编辑 NumberHistoryArray的第二维包含数字1到35。第三维包含写入numberDump数组时第二维中的每个数字应重复的次数

例如,如果NumberHistoryArray(4,0,0)是4,它应该将数字1写入四次,每次写入numberDump(0,0,0)到(0,0,3)中一次,并根据需要动态调整numberDump()的大小以适应每个1。通过numberDump(0,0,3)回显numberDump(0,0,0)的结果应该是1。如果NumberHistoryArray(4,1,1)是7,它应该在numberDump(1,1,0)中写入数字2七次。
编辑

当从Do循环中写入numberDump文本文件时,该文本文件是完美的。如果我从Do循环内部回显数组中每个元素的内容,则内容是准确的。一旦超出Do循环,内容将为空。有人要吗

Dim NumberHistoryArray(5, 34, 3)
Dim numberDump()
reDim numberDump(3, 34, 0)

' generate the number list and store it in the array
For n = LBound(numberDump, 1) to UBound(numberDump, 1)
  i = 1
  x = 0
  y = 1

  Do
    Set objTextFile = objFSO.OpenTextFile("numberDump.txt", 8, True)

    ' determine how many elements are needed in the third dimension of the
    ' array to store the output
    x = x + NumberHistoryArray(4, i - 1, n)

    ' resize the array
    ReDim Preserve numberDump(3, 34, x)

    ' input the numbers
    For z = y to UBound(NumberDump, 3)
      numberDump(n, i - 1, z) = i
      objTextFile.WriteLine(numberDump(n, i - 1, z))
    Next

    objTextFile.Close

    y = x + 1
    i = i + 1
  Loop Until i = 36
Next

For i = 0 to UBound(numberDump, 2)
For j = 0 to UBound(numberDump, 3)
    wscript.Echo numberDump(0, i, j)
Next
Next

听说过对象的寿命吗?在哪里初始化对象:在循环内还是在循环外,以便可以在整个
子程序中引用它

如何引用
循环
外部的
数组元素
?每个
元素
都有一个
索引
。因此,通过
索引
可以引用您的事件

e、 g.数组有3个元素,从
下限
0到2。在循环中,您可以参考
ArrayOne(1)
来获取第二个元素

除了使用索引引用元素外,您还可以尝试在
即时窗口
监视窗口
上的
调试模式
期间查看数组元素


因此,当您检查这些提示时,请向我们展示一个适当的完整代码以供进一步验证。

这里的问题是,您正在将
numberDump
的第三维尺寸调整为
x
,并在
n
的每次迭代中重置
x
的值。例如,当
n
为0时,在
Do
循环结束时,
x
可能等于10。但是,在下一次迭代中,当
n
为1时,
x
重置为0,最后将
numberDump
的第三维大小调整为0,删除了大部分现有元素

有两种解决方法:

  • 跟踪
    n
    的所有迭代的
    x
    最大值。根据需要,使用该值调整numberDump的大小

  • 使用锯齿状数组(也称为数组数组)。在这种情况下,
    numberDump
    将是一个二维数组,其值是包含重复值的数组。这将允许每个值具有不同的长度,与三维数组不同,三维数组中的第三维始终具有相同的长度


  • 我可能只是累了,但我很难理解你的目标。有没有可能包括一些初始化
    NumberHistoryArray
    numberDump
    的代码,以及用于在Do循环外回显数组内容的代码?是的,对此表示抱歉。我难以用语言表达目标。剧本很长,所以我会尽量包含一些必要的东西来获得这个想法。另外,我是在记事本++中完成这项工作的,所以我不确定有哪些调试工具可用。我刚刚插入wscript.Echo行以在某些点查看输出,然后在该部分工作时将其删除。没关系。:)准备好了就给我打电话。我的键盘有个问题。大多数钥匙似乎都弄错了。在VBScript中,一个过程中只有两个作用域:全局作用域和局部作用域。对象是否在循环内初始化与是否可以在循环外引用无关。也就是说,最好在脚本顶部使用
    Option Explicit
    ,并使用
    Dim
    显式声明所有变量。Option Explicit,是吗?我会调查的。我已经在循环之外初始化了每个数组,并且我还没有使用任何sub,所以过程中没有包含任何内容。我已经更新了原始帖子中的代码,并在它应该做的事情中添加了一些说明。我真的很感谢你们花时间来帮助我。天哪,我真不敢相信我错过了x=0在外环里面。先生,你太棒了。此外,您提出的锯齿阵列解决了我接下来要讨论的另一个问题。看来我得重新写些东西了。非常感谢。