2017-02-17 10 views
1

私は、巨大なファイル(800000行)から約7列の行の値を連結する最速の方法を見出そうとしています。2つ以上の文字列配列を結合

私は、各列を別々の配列に読み込むほぼ即時の方法を見出しました。

しかし、以下のコードを使用すると、処理は非常に遅く、100行ごとに2〜3秒かかるようです。

多分、あなたは私の助けを借りて、並列配列の値を連結せずに使うことができます。

列の順序が正しくありません。

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とかなり高度だので、あなたの最高のアイデアで私を襲いました。

+2

ループを開始する前に 'Application.ScreenUpdating = false'と書いてみましたか?私はあなたがスピードを必要とするのを見ました...そして、 'displayStatusBarEvents'を削除すると、おそらくあなたの速度も遅くなります。 – Vityata

+0

また、 'dData'はどのような型ですか? –

+0

明らかに、クラシックの包み込み(EnableEvents、...)。 MsOfficeのどのアプリケーションを使用していますか?配列の配列を行うように見えるので、あなたのコード(宣言と埋め込み/配列の分割)をもう少し追加して配列を記述することができますか? ;) – R3uK

答えて

1

投稿が一般的で難しく、完全なコードが表示されていません(ご覧になれば幸いです)。それはあなたが連結するときは、一度long型の文字列を結合するOptimize string handling in VB6

  1. を読まなければならないコメント

    のセットに合わない与えられた答えとしてこれを追加します。 dItem & (delimiterI & dData(colI)(rowI, 1))Ditem二回

  2. VbNullStringまたはLen(Ditem) = 0が速くよりIf dItem = ""
  3. あなたIFテストがElseを経由避けるために、最初の可能性が高い結果に分岐するで使用するdItem & delimiterI & dData(colI)(rowI, 1)に非常に優れています。 dItemが空白になりそうでない場合は、進行状況インジケータを持っている(モッズを使用して)StatusBarすべての10000行かそこらを使用するのではなく、あなたがどの別の関数(コールする必要がある場合は、あなたのIF流れ
  4. を変更あなたはForループを使って配列を結合する必要があります各ライン)

あなたの新しい質問

PowerShellを使用しての短い、つまりはをやって

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 
関連する問題