结合两个或更多的string数组
我试图find最大的方式来连接大约7列,从巨大的文件(80万行)的行值。
我发现几乎立即加载每个列在单独的数组中。
但是,当我使用下面的代码,处理是非常缓慢的,如每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相当先进,所以用你最好的想法打我。
很难,因为你的post是一般的,我们还没有看到完整的代码(很高兴看到它!)。 将它添加为回答,因为它不适合一组评论
您必须阅读优化VB6中的string处理
- 串联时,join一次长串。
dItem & (delimiterI & dData(colI)(rowI, 1))
比使用Ditem
两次的dItem & delimiterI & dData(colI)(rowI, 1)
-
VbNullString
或Len(Ditem) = 0
比If dItem = ""
更快 - 你的
IF
testing应该首先转移到更可能的结果,以避免通过Else
。 如果dItem不可能为空,请更改您的IF
stream - 如果你必须有一个进度指示器,使用
StatusBar
每10000行左右(使用Mod ),而不是调用一个单独的函数(你正在做的每一行)
你的新问题
使用PowerShell的缺点,你将不得不把你的arrays与一个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