Private Sub Main()
Dim allRecs As Collection
Dim result As Boolean
Set allRecs = MergeFiles("c:\File1.txt", "c:\file2.txt", "c:\file3.txt", "c:\file4.txt")
result = WriteFile(allRecs, "c:\mergedFile.txt")
End Sub
Public Function MergeFiles(ParamArray fileList() As Variant) As Collection
On Error Resume Next
Dim i As Integer, x As Integer
Dim o
Dim oFull As Collection
Set oFull = New Collection
Dim oFile As Collection
Set oFile = New Collection
For i = LBound(fileList) To UBound(fileList)
Set oFile = ReadFile(fileList(i))
For Each o In oFile
oFull.Add o, ExtractKey(o) 'will error through if the key (empID) already exists
Next o
Next i
Set MergeFiles = oFull
End Function
Private Function ExtractKey(ByVal record As String) As String
Dim aRecs As Variant
If record = "" Then Exit Function
aRecs = Split(record, ",")
ExtractKey = Replace(aRecs(0), Chr(34), "")
End Function
Private Function ReadFile(ByVal filePath As String) As Collection
On Error GoTo errHandler
Dim ff As Integer
Dim empID As String
Dim firstName As String
Dim lastName As String
Dim oRecs As Collection
Set oRecs = New Collection
ff = FreeFile()
Open filePath For Input As #ff
Do While Not EOF(ff)
Input #ff, empID, firstName, lastName
oRecs.Add BuildRecordString(empID, firstName, lastName), empID
Loop
Close #ff
Set ReadFile = oRecs
Exit Function
errHandler:
If Err.Number = 53 Then 'file not found
Set ReadFile = oRecs
Exit Function
Else
Resume Next
End If
End Function
Private Function BuildRecordString(ByVal empID As String, ByVal firstName As String, ByVal lastName As String) As String
BuildRecordString = empID & "," & firstName & "," & lastName
End Function
Private Function BreakString(ByVal record As String, ByRef empID As String, ByRef firstName As String, ByRef lastName As String)
Dim aRec As Variant
If record = "" Then Exit Function
aRec = Split(record, ",")
empID = aRec(0)
firstName = aRec(1)
lastName = aRec(2)
End Function
Private Function WriteFile(ByVal oRecs As Collection, ByVal filePath As String) As Boolean
On Error GoTo errHandler
Dim ff As Integer
Dim o
Dim empID As String, firstName As String, lastName As String
ff = FreeFile()
Open filePath For Output As #ff
For Each o In oRecs
Call BreakString(o, empID, firstName, lastName)
Write #ff, empID, firstName, lastName
Next o
Close #ff
WriteFile = True
Exit Function
errHandler:
On Error Resume Next
WriteFile = False
Close #ff
Exit Function
End Function