我正在解析制表符分隔的txt文件。文件中的每一行包含3个字段: 1. nCells - 它是常数,每行必须相同 2.产品指数 3.柜台(购买了多少产品)
我想创建一个包含每个产品索引的产品计数器的数组。 问题是我在解析文件时填充了这个数组,而且我不知道" nCells"进入解析循环之前的属性。
我应该在解析循环之外定义大小为1的数组,然后在解析nCell之后,执行以下操作:
If i = 1 Then ReDim array(1 to nCells)
或者有更好的方法吗?
例如:对于以下输入文件:
3 1 20
3 1 30
3 2 10
3 3 15
我想创建一个包含3个单元格的数组,其中单元格#1中包含50个(20 + 30),单元格#2中包含10个单元格,在单元格#3中包含15个单元格。 问题是我事先并不知道我有3个产品,我的阵列应该包含3个单元格。我只在解析文件的第一行时才发现这一点。所以我不能在循环外声明一个静态数组,我必须在循环内声明一个动态数组。
谢谢, 李
答案 0 :(得分:0)
我会使用一个集合,因为它会扩展到所需的大小。
Sub a() Dim myColl As Collection Dim i As Integer 设置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
End Sub
答案 1 :(得分:0)
您可以使用Dictionary
创建部件直方图
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)
。