Autor Tema: Leer archivo *.HEX  (Leído 7604 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Leer archivo *.HEX
« en: 16 de Agosto de 2008, 21:37:32 »
Saludos:

Quiero leer un archivo *.hex y mostrarlo en una caja de texto, pero tengo problemas, aqui les muestro mi codigo a ver si me dan una mano, gracias.

Hago clic en un boton y se abre la ventana de dialogo abrir archivo:

Private Sub Command1_Click()
Dim Todo
Dim Numero As Integer
With CommonDialog1
    .Filter = "Hexa|*.hex"
    .DialogTitle = "Abrir Archivo Hexa"
    .ShowOpen
    Open .FileName For Binary As #1 'Abre el archivo Hexa
    Todo = Input(LOF(1), #1) 'Lee todo el archivo y lo guarda en _
    la variable Todo
    Numero = Hex(Asc(Todo)) 'obtengo el valor hexadecimal
    Text1.Text = Text1.Text & Numero 'muestro todo el contenido _
    en el TextBox
    Close
End With
End Sub

Javicho.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Leer archivo *.HEX
« Respuesta #1 en: 16 de Agosto de 2008, 22:10:45 »
Hola Javicho!

No entiendo mucho porque haces esa conversión, siendo que el formato de un archivo .hex ya contiene los datos en el formato hexadecimal(con ciertos caracteres especiales entre medio).
Igualmente, te devuelve un error de conversión porque la función Hex() devuelve una variable de tipo string. No integer como definiste a Numero. A su vez, hacer Asc() de una cadena de longitud mayor a 1 caracter, devuelve el valor ASCII sólo del primer caracter de la cadena ingresada por lo que tenés que ir haciendolo caracter por caracter...

Private Sub Command1_Click()

Dim Todo As String
Dim Numero As String
Dim i As Long

Text1.Text = vbNullString

With CommonDialog1
    .Filter = "Hexa|*.hex"
    .DialogTitle = "Abrir Archivo Hexa"
    .ShowOpen
    Open .FileName For Binary As #1 'Abre el archivo Hexa
    Todo = Input(LOF(1), #1) 'Lee todo el archivo y lo guarda en _
    la variable Todo
    For i = 1 To Len(Todo)
        Numero = Hex(Asc(Mid(Todo, i, 1))) 'obtengo el valor hexadecimal
        Text1.Text = Text1.Text & Numero 'muestro todo el contenido _
        en el TextBox
    Next
    Close 1
End With
End Sub

Igualmente, probá de esta otra manera que te pongo a continuación, porque me parece que no es necesario lo que estás haciendo...

Private Sub Command1_Click()

With CommonDialog1
    .Filter = "Hexa|*.hex"
    .DialogTitle = "Abrir Archivo Hexa"
    .ShowOpen
    Open .FileName For Binary As #1 'Abre el archivo Hexa
    Text1 = Input(LOF(1), #1) 'Lee todo el archivo y lo guarda en _
     Text1
    Close 1
End With
End Sub

Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Leer archivo *.HEX
« Respuesta #2 en: 20 de Agosto de 2008, 12:25:36 »
Hola BrunoF:

Gracias por tu respuesta, estos dias me quedé sin internet y recien el dia de hoy tuve la conexión y acabo de leer tu respuesta y es curioso porque al dia siguiente de la publicación seguí peleandome con el visual y a duras penas dí con la solución la cual fui optimizandola mas hasta llegar a lo siguiente:

Private Sub Command1_Click()
Dim Todo, j, Un_Byte, Byte_Hexa
With CommonDialog1
    .Filter = "Hexa|*.hex"  'Solo acepta archivos *.hex
    .DialogTitle = "Abrir Archivo Hexa" 'Etiqueta en la Ventana Abrir
    .ShowOpen
    Open .FileName For Binary As #1 'Abre el archivo Hexadecimal
    Todo = Input(LOF(1), #1) 'Lee todo el archivo y lo guarda en la variable Todo
    For j = 1 To Len(Todo)
    Un_Byte = Mid(Todo, j, 1)  'leo 1 byte en la posición j
    Byte_Hexa = Hex(Asc(Un_Byte)) 'obtengo el valor hexadecimal
    If Asc(Un_Byte) <= &HF Then
        Byte_Hexa = "0" & Byte_Hexa 'Concateno un "0" a los valores hexa = [0,1,..,F]
    End If
    Text1.Text = Text1.Text & Byte_Hexa & " " 'muestro 1 Byte por vez en el TextBox
    Next j
    Close
End With
End Sub

Y como verás es practicamente el mismo código qu el tuyo con la diferencia que le tuve que añadir un par de lineas para evitar que me salga "D" "B" .. en el textbox porque yo prefiero que aparezca "0D" "0B" ...

El problema que tengo es que el archivo que abro no puede ser mayor de aprox 32KB me parece porque si lo hago se cuelga el programa y no abre el archivo. Tal vez tenga que definir con "Dim .. as Long" o algo asi.

Por otro lado estaba pensando en usar una tabla como la que se obtiene con el control MSFlexgrid pero creo que este control no me permite modificar los valores de la tabla no?

Alguna idea será bienvenida. Gracias.

Javicho.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Leer archivo *.HEX
« Respuesta #3 en: 20 de Agosto de 2008, 14:33:59 »
Hola

El problema es que, por ejemplo, los TextBox son "estables" hasta los 32kB. No soportan más de 32kB según las especificaciones del VB6.
No conozco mucho el MSFlexGrid, pero por lo poco que vi recién, creo que se pueden modificar los valores usando sus eventos.
Un control que yo he usado mucho para diversos fines, es el ListView(dentro del paquete de controles Microsoft Common Controls). Tiene 4 modos(Views), podrías usarlo, por ejemplo, en el modo 4 que es el Report. Seguramente te sirva.

Y ojo a la hora de definir variables...No definir el tipo de variable hace que se definan de tipo "variant". Este tipo es el que más memoria RAM consume, ya que puede "mutar" y convertirse en el tipo que necesites según cada uso.

Saludos.


"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Leer archivo *.HEX
« Respuesta #4 en: 20 de Agosto de 2008, 20:52:33 »
Gracias por tus consejos voy a investigar mas al respecto.

Saludos.

Javicho.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Leer archivo *.HEX
« Respuesta #5 en: 20 de Agosto de 2008, 23:18:57 »
buenas noches amigo el control MSFlexgrid si permite modificar el contenido de sus celdas yo tengo proyectos pero para archivos bin nunca trabaje con archivos hex ya que para los archivos hex te recomiendo que te documentes con el formato intel.

Saludos y estamos leyendonos.
Atten. Alexander Santana.
Barcelona-Venezuela
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE