0

我正在解析一个制表符分隔的 txt 文件。文件中的每一行包含 3 个字段: 1. nCells - 它是常量,每行必须相同 2. 产品索引 3. 计数器(购买了多少产品)

我想创建一个包含每个产品索引的产品计数器的数组。问题是我在解析文件时填充了这个数组,并且在进入解析循环之前我不知道“nCells”属性。

我是否应该在解析循环之外定义一个大小为 1 的数组,然后在解析 nCells 之后,执行以下操作:

If i = 1 Then ReDim array(1 to nCells)

或者,还有更好的方法?

例如:对于以下输入文件:

3    1    20
3    1    30
3    2    10
3    3    15

我想创建一个包含 3 个单元格的数组,其中单元格#1 (20+30) 中包含 50 个,单元格#2 中包含 10 个,单元格#3 中包含 15 个。问题是我事先不知道我有 3 个产品并且我的数组应该包含 3 个单元格。我只是在解析文件的第一行时才发现这一点。所以我不能在循环外声明一个静态数组,我必须在循环内声明一个动态数组。

谢谢,李

4

2 回答 2

0

我会使用一个集合,因为它只会扩展到所需的大小。

Sub a() Dim myColl As Collection Dim i As Integer Set myColl = New Collection Dim v As Variant

For i = 1 To 3
    myColl.Add Array(i, Now)
Next
For Each v In myColl
    Debug.Print v(0), v(1)
Next
Set myColl = Nothing

结束子

于 2013-11-09T23:30:54.590 回答
0

您可以使用 aDictionary创建零件的直方图

Public Sub Histogram()
    Dim d As New Dictionary, parts() As String
    Dim ts As TextStream, line As String
    Set ts = fso.OpenTextFile("BookData.txt", ForReading, False)
    While Not ts.AtEndOfStream
        line = ts.ReadLine
        parts = Split(line, vbTab) ' 0-index string array 
        ' 2nd column contains the unique product string.
        ' Use product as key for dictionary and quantity for value
        If d.Exists(parts(1)) Then
            d(parts(1)) = d(parts(1)) + CInt(parts(2))
        Else
            d.Add parts(1), CInt(parts(2))
        End If
    Wend
    ts.Close
    Dim i As Integer
    For i = 1 To d.Count
        Debug.Print d.Keys(i - 1), d(d.Keys(i - 1))
    Next i
    ' Produces the following output with your example data
    ' 1    50
    ' 2    10
    ' 3    15
End Sub

这将忽略parts(0)每一行的第一列。

于 2013-11-10T05:12:33.593 回答