Comparar dos archivos y mostrar sus diferenciasUso del Get para mostrar el valor ASCII de un carácter contenido en una posición de memoria y compararlo con el de otro archivo
Fecha: 01/Abr/2006 (01/04/06)
|
Mientras realizaba una comparación de dos ficheros mediante el FC del antiguo MS-DOS me vi con la necesidad de crear una utilidad parecida pero que a su vez mostrara la posición de memoria y el carácter ASCII que diferenciaba un fichero de otro modificado.
Lo único que le falta a esta rutina es disminuir el tiempo de comparación. Si usas el código o lo modificas, avísame, ya que estoy bastante interesado en poder ampliarlo o modificar algunas de sus funciones, y estoy abierto a todo tipo de sugerencias.
Éste es el código fuente para VB que determina estos valores:
'--------------------------------------------------------------------------------------------- ' Fecha/Hora : {05/06/2006} {20:54 p.m.} ' Autor : Cristian Forcadell ' Propósito : Comparación de dos archivos mostrando las diferencias en posiciones de memoria '--------------------------------------------------------------------------------------------- Private SubCommand1_Click() Text2.Text = "" Command1.Enabled = False Dim nFic As Integer Dim sFic As String Dim posmemoria As Long sFic = Text3.Text Dim I As Long For I = 0 To FileLen(sFic) b = I + 1 DoEvents 'archivo original sFic = Text3.Text nFic = FreeFile Label6.Caption = FileLen(sFic) Open sFic For Binary As nFic A$ = Space$(1) Get nFic, Label1.Caption, A$ Afile = Asc(A$) Close nFic 'archivo modificado sFic = Text4.Text nFic = FreeFile Open sFic For Binary As nFic A$ = Space$(1) Get nFic, Label1.Caption, A$ Bfile = Asc(A$) Close nFic posmemoria = Label1.Caption - 1 ' mostrar las posiciones de memoria donde hay diferencias ' y los datos contenidos entre parentesis y separados por comas If Not Afile = Bfile Then _ Text2.Text = Text2.Text & posmemoria & "(" & Afile & ", " & Bfile & ")" & vbCrLf Label1.Caption = Label1.Caption + 1 Next I Command1.Enabled = True Label1.Caption = "1" End Sub
Por ahora, y en diferencia respecto al código fuente anterior, ya no se usa el timer, de todas formas el tiempo para analizar sigue siendo elevado; más adelante estudiaré la forma de buscar diferencias en bloques de X bytes, para disminuir el tiempo de comparación.
Fichero con el código de ejemplo: cristianfa2_COMPARADOR.zip - 2.35 KB (revisado el 06/Jun/2006)
(MD5 checksum: 4924133B66EC38A5982637FF6B53D468)