2013-05-11 2 views
0

나는 심각한 문제가 여기에있다. 어떤 종류의 도움이라도 대단히 감사합니다 !!vba를 사용하여 거대한 텍스트 파일을 비교하십시오

두 개의 거대한 텍스트 파일 (130MB)이 있는데, 각각 수천 개의 레코드가 있습니다. vba 또는 다른 방법을 사용하여 두 파일을 비교하고 머리글과 두 개의 추가 열이 포함 된 스프레드 시트를 생성해야합니다. 두 개의 추가 열은 파일 이름이 될 것이고 다음 열에는 오류가있는 특정 열이 표시되어야합니다. 각 레코드에 여러 불일치가 있습니다. 하나의 파일은 다른 파일에서 찾을 수없는 레코드를 가질 수 있습니다. 따라서이 조건은 스프레드 시트에 기록되어야합니다.

예 : 위 예에서

Media Events: Taking one record from each. 
00000018063|112295|000|**0009**| 

PROL: 
00000018063|112295|000|**0013**| 

는 기록은 두 개의 파일로된다. 강조 표시된 것은 레코드 간의 차이입니다. 그래서 출력은 다음과 같이해야합니다 ..

HH_NUMBER  | CLASS_DATE | MV_MIN DURATION File Mismatc  Mismatch Reason 
00000018063 | 112295 | 000 **0009** Media Events  Mismatches in DURATION 
00000018063 | 112295 | 000 **0013** PROL    Mismatches in DURATION 
00000011861 | 112295 | 002  0126  Media Events  missing in PROL file 
+0

난 당신이 어쩌면 네 개의 열하는 예를 간단하게 제안 할 수 있습니다? – Floris

+0

정확히 무엇을 묻고 있습니까? 지금은 문제를 해결할 수있는 위치와 프로세스를 이해하기 위해 흐름 차트를 정렬해야하는 것처럼 보입니다. 언어를 선택하고 코딩 단계를 시작하는 것이 가장 중요하지 않습니다 ... –

+1

의미있는 대답을 얻으려면 지침 http://stackoverflow.com/questions/how-to-ask의 FAQ 및 개인적 취향을 읽어보십시오. http://mattgemmell.com/2008/12/08/what-have-you-tried –

답변

2

그것은 여기에 세 가지 문제가있는 것 같다

1) 두 파일 사이에 일치하는 기록 (첫 번째 열)을 찾기가.

2) 첫 번째 열에서 일치하는 기록 비교 - 차이, 레코드가 하나 개의 파일에 존재하지만 다른하지 않으면 차이가)

3 어떤 기록이있는 경우, 즉를 기록합니다.

두 개의 "거대한 파일"은 실제로 동일한 Excel 통합 문서의 별도 시트라고 가정하고 레코드는 첫 번째 키로 정렬됩니다. 이렇게하면 처리 속도가 크게 빨라집니다. 그러나 속도는 부차적 인 문제입니다. 또한 출력물을 넣는 세 번째 시트가 있다고 가정합니다.

VBA 코드의 개요는 다음과 같습니다. 응용 프로그램에 대해 "올바르게"이해하려면 약간의 작업을해야하지만이 작업을 수행하면 좋을 것입니다.

Sub compare() 
Dim s1 as Worksheet 
Dim s2 as Worksheet 
Dim col1 as Range 
Dim col2 as Range 
Dim c as Range 
Dim record1 As Range, record2 As Range, output As Range 
Dim m 
Dim numCols as Integer 

numCols = 5 ' however many columns you want to compare over 

Set s1 = Sheets("Media") 
Set s2 = Sheets("Pro") 
Set output = Sheets("output").Range("A2") 

Application.ScreenUpdating = False 
s1.Select 
Set col1 = Range("A2", [A2].End(xlDown)); 
s2.Select 
Set col2 = Range("A2", [A2].End(xlDown)); 

On Error Resume Next 
For Each c in col1.Cells 
    m = Application.Match(c.Value, col2, 0); 
    If isError(m) Then 
    ' you found a record in 1 but not 2 
    ' record this in your output sheet 
    output.Value = "Record " & c.Value & " does not exist in Pro" 
    Set output = output.Offset(1,0) ' next time you write output it will be in the next line 
    ' you will have to do the same thing in the other direction - test all values 
    ' in 2 against 1 to see if any records exist in 2 that don't exist in 1 
    Else 
    ' you found matching records 
    Set record1 = Range(c, c.offset(0, numCols)) 
    Set record2 = Range(col2.Cells(m,1), col2.Cells(m,numCols)) 
    ' now you call another function to compare these records and record the result 
    ' using the same trick as above to "go to the next line" - using output.Offset(1,0) 
    End If 
Next c 
End Sub 
1

당신은 수식이 작업을 수행 할 수 있습니다 :

이 승기으로

를 참조하십시오 당신은 & B, 당신은 일치하거나 일치하지 않는 보여주기 위해 열 C와 D에 아래와 같은 수식을 사용할 수있는 열 두 개의 목록이있는 경우, 기본적으로, 당신에게 생각을했습니다 : C1에서

=If(isna(match(A1,B:B,0)),A1,"") 

하고, D1

에서
=IF(Isna(Match(B1,A:A,0)),B1,"") 

모두 아래로 복사.

더 읽을 거리 : 가독성

관련 문제