SoloCodigo

Programación General => Pascal => Mensaje iniciado por: SergioyoPlayer en Sábado 18 de Octubre de 2008, 21:48

Título: Ficheros en Binario/hexadecimal
Publicado por: SergioyoPlayer en Sábado 18 de Octubre de 2008, 21:48
Veréis: quiero poder leer y crear ficheros en mdo binario ("a pelo"). Yo codifico e interpreto cómo está guardado el fichero, al estilo "editor hexadecimal", que te abre lo que sea y ves cómo está.
Ya me he definido las funciones necesarias para represetar el binario y todo eso, pero no sé de qué tipo tiene que ser declarado el fichero :s

O he intentado con BYTE, y traducir a binario, pero es igual que abrirlo en modo texto (no es lo que yo quiero, ya que no abre todos los ficheros). He probado con declararlo de tipo BOOLEAN, alternando el TRUE a 1 y luego probé a 0, pero nada.

Alguna idea?? Os pongo mi "aplicación experimental" como adjunto

Sobre todo, quedáos con la idea de que necesito poder abrir CUALQUIER FICHERO como un editor hexadecimal lo hace.

Gracias de antemano!!
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: m0skit0 en Sábado 18 de Octubre de 2008, 22:04
¿Crees de verdad que alguien en su sano juicio va a descargar y ejecutar un programa que ni siquiera sabe a ciencia cierta de dónde ha salido? Yo no.

Código: Pascal
  1.  
  2. VAR f_binario: FILE OF byte;
  3.  
  4.  
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: eternity en Domingo 19 de Octubre de 2008, 04:11
Lo que quieres es hacer un programa que haga algo de este tipo:

Código: Text
  1.  
  2.  
  3. "000000000  4C 6F 20 71 75 65 20 71-75 69 65 72 65 73 20 65   |Lo que quieres e|"
  4. "000000010  73 20 68 61 63 65 72 20-75 6E 20 70 72 6F 67 72   |s hacer un progr|"
  5. "000000020  61 6D 61 20 71 75 65 20-68 61 67 61 20 61 6C 67   |ama que haga alg|"
  6. "000000030  6F 20 64 65 20 65 73 74-65 20 74 69 70 6F 3A      |o de este tipo: |"
  7.  
  8.  
  9.  

si es asi consultame, si no, no entiendo que es lo que queres hacer!
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: SergioyoPlayer en Domingo 19 de Octubre de 2008, 13:04
Es precisamente lo que dice Eternity jeje

Pero quiero que sea capaz de abrir cualquier tipo de dato escrito en disco (con lo de BYTE solo me abre los de texto y los demás, abre "solo un cacho", porque el EOF salta antes de acabar :s)

Respecto a lo de bajar una aplicación que en efecto, no sabes de dónde ha salido, está en rar por algo ¬¬

Pd.: Si me puedes decir cómo declarar el tipo y cómo leerlo, te lo agradecería mucho eternity
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: eternity en Domingo 19 de Octubre de 2008, 17:41
Tendrias que probar con lo siguiente:

Código: Pascal
  1.  
  2. Var
  3.    archivo: file of text;
  4.  
  5.  

eso deberia abrir cualquier archivo, ahora estoy un tanto ocupado con la facu, asi que depues vere eso que dices sobre el EOF, mandame el codigo de lo que tengas y yo te lo reviso y debugueo, por que si no es muy dificil, vamos a los hechos!

  :good:
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: m0skit0 en Domingo 19 de Octubre de 2008, 17:42
Cita de: "SergioyoPlayer"
porque el EOF salta antes de acabar

Eso es porque usas EOF como condición de final de fichero y no deberías. Tendrías que usar el tamaño del fichero y compararlo con tu puntero de fichero.
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: SergioyoPlayer en Domingo 19 de Octubre de 2008, 21:31
Te refieres al procedimiento BLOCKREAD??

Jum... Lo estuve mirando. Lo intentaré con eso ^^

Pero aún así, me gustaría oír la propuesta de eternity (por si acaso me falla esta y el error está en la interpretación :s)

Pero muchas gracias!! Me pongo a ello  :hitcomp:
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: eternity en Domingo 19 de Octubre de 2008, 22:22
bueno aca esta el esqueleto de lo tenes que hacer hay algunos comentarios sobre algunas cosas, fijate que use el blockread que antes mencionabas, es por que siempre quiero leer tantos caracteres como quiera.

Código: Pascal
  1. program visor;
  2. const
  3.   MaxPalabra = 16;
  4. var
  5.   archivo: file; {archivo sin tipo}
  6.   path: string;
  7.   palabra: array [1..MaxPalabra] of char; {use esto por que mi compilador se quejaba con un string}
  8.   i: byte;
  9.   leidos: integer;
  10.   linea: longint;
  11. begin
  12.   write('ingrese la dir del archivo: '); readln(path);
  13.   assign(archivo, path); {asocio el archivo a la dir}
  14.   reset(archivo, 1); {lo prepara para escritura, el 1 es por que leeremos bytes}
  15.   {aca faltan los controladores para saber si el archivo existe o no}
  16.  
  17.   linea := 1;
  18.   while not(EOF(archivo)) do
  19.    begin
  20.      writeln;
  21.      blockread(archivo, palabra, sizeof(palabra), leidos);
  22.      write(linea, ' | '); {aca iria el numero de linea de la forma FFFF FFFF}
  23.      linea := linea + 1;
  24.      for i := 1 to MaxPalabra do
  25.       write(palabra[i], ' ');{aca iria tu funcion de hexadecimal es}
  26.      write('| ',palabra, ' |');
  27.    end;
  28.   readln;
  29.   close(archivo);
  30. end.
  31.  
  32.  

luego tendrias que fijarte que algunos cuando llegan a la mitad ponen un guion o separador no es mas que un simpre if pero te lo dejo a vos, y ademas tomate el trabajo de que la cadena (un buffer) palabra, inicialice simpre por que si en la ultima lectura antes del EOF lees menos de MaxPalabras podrian quedarte valores con "basura" no contemple esto, pero esa es tu responsabilidad, que la fuerza te acompañe joven padawan!

 :good:
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: SergioyoPlayer en Lunes 20 de Octubre de 2008, 23:53
Muchas gracias por las sugerencias ^^

Ya hice entre ayer y hoy toda la declaración de tipos y funciones del binario y hexadecimal (a mi manera), y conseguí leer correctamente cualquier tipo de fichero del disco duro, y representar los bytes en binario, hexadecima, numérico y carácter ^^

Una cosilla a anotar: si en vez de INTEGER, declaras WORD, en este caso podrás contar el doble de datos. Y si en vez de LONGINT utilizas CARDINAL, igual :)  (en su momento me empollé la documentación que trae FPC jeje).

Gracias de nuevo :)   :lol:  :)  :)
Título: Re: Ficheros en Binario/hexadecimal
Publicado por: eternity en Lunes 20 de Octubre de 2008, 23:58
Genial! cuando lo tengas listo compartelo con la comudidad!

 :beer: