Bueno aqui mejore el codigo originalmente posteado, no se si sea mas rapido porque no lo probe con tantos registros, solo con los que el puso de ejemplo.
Utiliza la memoria para realizar el proceso y no necesita del archivo RUTS.txt aunque lo deje por si acaso. Hize un solo bucle para todo el proceso lo cual es mas rapido ya que antes dijiste que campo1 y 2 no son necesarios.
Suponiendo que el "rut" no se encuentra en los campos 1 o 2 hize este code:
Modulo:
Utiliza la memoria para realizar el proceso y no necesita del archivo RUTS.txt aunque lo deje por si acaso. Hize un solo bucle para todo el proceso lo cual es mas rapido ya que antes dijiste que campo1 y 2 no son necesarios.
Suponiendo que el "rut" no se encuentra en los campos 1 o 2 hize este code:
Código (vb) [Seleccionar]
Option Explicit
Private Sub Command1_Click()
Dim DIRECCION As String
Dim Sumatoria As String
Dim Content() As String
Dim I As Long
Dim Regs As String
Dim Llave As String
Dim Ruts As String
Dim V As Integer
If Dir$(App.Path & "\RUTS.txt") <> "" Then Kill App.Path & "\RUTS.txt"
If Dir$(App.Path & "\ARCHIVO_FINAL.txt") <> "" Then Kill App.Path & "\ARCHIVO_FINAL.txt"
cd.ShowOpen ' abre una ventana para buscar el archivo base
DIRECCION = cd.FileName ' la direccion se guarda en una variable
Open DIRECCION For Input As #1 ' abrimos el archivo ' lo recorremos mientras no sea fin de archivo
Content = Split(Input$(LOF(1), #1), vbCrLf)
Close #1
For I = LBound(Content) To UBound(Content)
If Content(I) <> "" Then
Llave = Mid$(Content(I), 58, 9)
Sumatoria = Mid$(Content(I), 35, 8)
If Llave <> "" Then
V = InStr(1, Regs, Llave)
If V = 0 Then
Regs = Regs & Llave & vbCrLf
Ruts = Ruts & Content(I) & vbCrLf
EscriveLog Llave, "RUTS"
Else
V = InStr(1, Ruts, Llave)
Ruts = Replace$(Ruts, Mid$(Ruts, V - 23, 8), Format$(Val(Mid$(Ruts, V - 23, 8)) + Val(Sumatoria), "00000000"))
End If
End If
End If
Next
Ruts = Mid$(Ruts, 1, Len(Ruts) - 2)
EscriveLog Ruts, "ARCHIVO_FINAL"
MsgBox "FIN"
End Sub
Modulo:
Código (vb) [Seleccionar]
Public Function EscriveLog(ByRef Texto As String, ByRef tipo As String) ', ByRef xTipo As Byte)
Dim strFile As String
Dim fn As Long
Dim strLog As String
strFile = App.Path & "\" & tipo & ".txt"
fn = FreeFile
strLog = Texto
Open strFile For Append As fn
Print #fn, strLog
Close fn
End Function