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在外环里面。先生,你太棒了。此外,您提出的锯齿阵列解决了我接下来要讨论的另一个问题。看来我得重新写些东西了。非常感谢。