2013-10-21 2 views
0

탭으로 구분 된 txt 파일을 구문 분석하고 있습니다. 일정하고 (많은 제품을 구입 한 방법) 각 라인 2. 제품 색인 3. 카운터VBA 루프에서 동적 배열을 사용하는 방법

에 대해 동일해야하는 내가를 만들 - 1 n- 셀들 : 파일의 각 행은 3 개 필드를 포함 각 제품 색인에 대한 제품 카운터를 포함하는 배열. 문제는 파일을 구문 분석하는 동안이 배열을 채우는 것입니다. 그리고 구문 분석 루프를 시작하기 전에 "nCells"속성을 알지 못합니다.

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

아니면 더 좋은 방법이있다 :

내가 n- 셀들를 분석 한 후, 다음 구문 분석 루프 외부 크기 1의 배열을 정의하고, 경우, 그런 짓을? 예를 들어

다음 입력 파일의 경우 :

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

난에서 셀 # 2 (15)에 셀 1 (20 + 30), 10 (50)를 포함 3 셀 어레이를 만들 셀 # 3. 문제는 사전에 3 가지 제품이 있고 배열에 3 개의 셀이 있어야한다는 것을 모르는 것입니다. 파일의 첫 번째 행을 구문 분석하는 동안에 만이를 발견합니다. 그래서 루프 외부에 정적 배열을 선언 할 수 없으며 루프 내부에 동적 배열을 선언해야합니다.

덕분에, 리

+1

이해할 수 있는지 잘 모르겠습니다. 샘플 데이터와 달성하고자하는 것을 보여줄 수 있습니까? –

+0

죄송합니다. 질문에 예제를 추가했습니다. 도움이되기를 바랍니다. – user429400

+0

오 좋아. 가장 좋은 방법은 한 번에 배열의 텍스트 파일을 읽은 다음 REDIM PRESERVE를 사용하여 해당 배열의 각 행을 다른 배열로 읽는 것입니다. 시도 해보시겠습니까? –

답변

0

난 그냥 필요한 크기로 확장됩니다이 같은 컬렉션을 사용합니다.

하위 A() 희미한 MYCOLL은 컬렉션 희미한으로 난 변형으로 정수 설정 MYCOLL = 새 컬렉션 희미한 V로

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 

최종 하위는

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 

이것은 th 각 열의 첫 번째 열 parts(0).