Colaboraciones en el Guille

Comparar dos archivos y mostrar sus diferencias

Uso 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)
Revisado: 06/Jun/2006
Autor: Cristian Forcadell - [email protected]

 


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 Sub Command1_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)


ir al índice principal del Guille