每次迭代VBS的For Next循环中的新数组

时间:2017-07-31 00:49:28

标签: arrays vbscript nested

我有一段代码可以打开文件夹中的每个文本文件,我不仅要将文件名放入数组中,还要将文件内的文本拆分成数组,如下所示:

i = 0
n = 1
For Each File In Folder
    i = i + 1
    Dim UserArray & i()
    Set openedFile = fso.OpenTextFile(File)
    Do Until openedFile.AtEndOfStream 
        Line = openedFile.ReadLine
        ReDim Preserve UserArray & i(n)
        UserArray & i(n) = Line
        n = n + 1
    Loop
    n = 0
Loop

这个想法是每行后来都是strComp到另一个文本文件中的另一行数组。 因此,每个文件都需要为其文本内容创建唯一的数组名称,并且任何给定文件夹中的文件数量都会有所不同。

以上不起作用,有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的代码中存在语法错误(第5,9,10行 - 通过使用execute语句修复,允许您在运行时使用不同的名称动态声明变量)以及可变的拼写错误(第8行)。

P.S。我没有对这里应用的逻辑进行任何更改。只是想纠正错误。

i = 0
n = 0                                                   'initialised to 0
For Each File In Folder
    i = i + 1
    Execute "Dim UserArray"&i&"()"                      'used execute statement to declare arrays with new names based on the value of i for each file
    Set openedFile = fso.OpenTextFile(File)
    Do Until openedFile.AtEndOfStream 
        Line = openedFile.ReadLine                      'corrected the spelling mistake here
        Execute "ReDim Preserve UserArray"&i&"("&n&")"
        Execute "UserArray"&i&"("&n&")="&Line
        n = n + 1
    Loop
    n = 0
Loop

在此代码之后,你应该有第一个文件的UserArray1,第二个文件的UserArray2等等......

答案 1 :(得分:0)

您可以尝试一组数组。像这样:

Dim Userarray() As Variant
Dim subArray() As String

i = 0
n = 1

For Row = 0 To 4
    i = i + 1
    ReDim subArray(i)
    For Each cell In ActiveSheet.Range(Cells(i, 1), Cells(i, 5))
        ReDim Preserve subArray(n)
        subArray(n) = cell.Value
        n = n + 1
    Next
    ReDim Preserve Userarray(i)
    Userarray(i) = subArray
    n = 0
Next

(我没有文件,所以我只是在Excel中使用一个范围)。我假设VBA与VBScript足够类似,可以使用...在Userarray(1)中将第一行数据作为数组生成,将第二行数据作为Userarray(2)中的数组等等。