我试图找到从大型文件(800 000行)中连接大约7列的行值的最快方法。
我发现了一种几乎即时的方法,可以在不同的数组中加载每一列。
但是当我使用下面的代码时,处理速度非常慢,例如每100行需要2-3秒。
也许你们可以帮助我一种在没有for的情况下从并行数组连接值的方法。
列的顺序不正确。
For rowI = LBound(arrShInvoice) To UBound(arrShInvoice)
dKey = arrShInvoice(rowI, 1)
dItem = ""
Call displayStatusBarEvents("Procesing " & dFName & vbNewLine & "row: ", rowI, UBound(arrShInvoice), 100, , True)
For Each colI In arrTargetFields
If dItem = "" Then
dItem = dData(colI)(rowI, 1)
Else
dItem = dItem & delimiterI & dData(colI)(rowI, 1)
End If
Next
dDescriptive.Add dKey, dItem
Next
我在VBA方面相当先进,所以用你最好的想法来打击我。
答案 0 :(得分:1)
很难发布您的帖子,而且我们还没有看到完整的代码(很高兴看到它!)。将它添加为答案,因为它不适合一组评论
您必须阅读Optimize string handling in VB6
dItem & (delimiterI & dData(colI)(rowI, 1))
比使用dItem & delimiterI & dData(colI)(rowI, 1)
两次Ditem
要好得多
VbNullString
或Len(Ditem) = 0
比If dItem = ""
IF
测试应首先分支到更可能的结果,以避免通过Else
。如果 dItem 不可能为空,请更改IF
流程StatusBar
每10000行左右(使用 Mod )而不是调用单独的函数(您正在执行每个< / em> line)您的新问题
如果不使用PowerShell,您必须将数组与For
循环组合,即
Dim Array1()
Dim Array2()
Dim lngRow As Long
Array1 = Array("a", "b", "c")
Array2 = Array(1, 2, 3)
For lngRow = 0 To UBound(Array1)
Array1(lngRow) = Array1(lngRow) & Array2(lngRow)
Next