Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2012
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
Unhappy Binario a Texto

Hola a todos, tengo un problema y les agradecería mucho su ayuda.

tengo un archivo binario, el cual quiero convertir a texto he usado la función blockread y luego intento escribir lo que leyó la función en un txt, algo asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  arc:file;
  b:word;
  i:integer;
  arr:textfile;
begin
  assignfile(arc,'I:\Radar raw data\20080101 a 20080219\RAW_NA_000_236_20080101001008');
  reset(arc,2);
  assignfile(arr,'D:\Users\Alvao\Desktop\culos.txt');
  ReWrite(arr);
  while not eof (arc) do
  begin
    blockread(arc,b,1);
    Write(arr,inttostr(b));
  end;
end;

Lo único que veo en el archivo que creo son puros números.

Se supone que el binario es de texto, me explico, es texto que pusieron en un archivo binario por que un txt estaría muy pesado, entonces yo necesito abrir el binario convertirlo a texto, leer una parte de él guardarlo en otro txt.

ya tengo rato con esto no nomas no puedo,

gracias por su ayuda.
Responder Con Cita
  #2  
Antiguo 18-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gusspagano.

Creo que tenes que dar mas detalles...

¿ Que tipo de datos tiene el archivo "RAW_NA_000_236_20080101001008" ? Por el nombre pareciera una imagen en formato RAW, pero no podría asegurarlo sin ver la extensión.

Cita:
Se supone que el binario es de texto, me explico, es texto que pusieron en un archivo binario por que un txt estaría muy pesado
¿ Como que el binario es de texto ? Un archivo binario no es de texto aún si se le cambia la extensión. Por otro lado si el archivo de texto fuera muy pesado (para enviarlo supongo) lo normal sería comprimirlo con alguna herramienta.

Por eso te decía que tendrías que dar más detalles sobre el formato del archivo orígen y también que que es lo que deseas hacer con lo que leas de él.

Si no se corre el riesgo de hacer las cosas como el traste... ('D:\Users\Alvao\Desktop\culos.txt')

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 18-05-2012
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
jajaja, que tal ecfisa,

mira, el archivo que tengo es generado por un radar, el archivo no tiene extensión (así se genera) se supone que el tipo de dato que contiene es texto, primero un encabezado, después cantidades que representan la reflectividad que mide el radar en un espacio dado en la atmósfera.

ahora el radar genera dos archivos de estos cada 15 minutos y pesan al rededor de 400 KB, como la cantidad de archivos que genera el radar es bastante considerable (192 al dia por 365 dias al año, etc.) se genera un binario por que su tamaño en mucho menor que un txt, lo que quiero hacer con este archivo es leer una parte de él para calcular precipitación a partir de la reflectividad.

Este es un ejemplo que viene en el manual del radar, algo así debería verse el archivo una vez convertido a texto.

0 12 <raw_prod_bhdr>
12 76 <ingest_data_header>
88 SINT2 –32762 (code for six data words to follow)
90 BIN2 0 (starting azimuth) Six
92 BIN2 91 (starting elevation) words
94 BIN2 182 (ending azimuth) referred
96 BIN2 91 (ending elevation) to
98 SINT2 200 (number of range bins) above
100 UINT2 3 (time)
102 SINT2 50 (code for fifty zeros skipped)
104 SINT2 –32767 (code for one data word follows)
106 SINT2 128 (zero velocity value) One data word
108 SINT2 49 (code for forty nine zeros skipped)
110 SINT2 1 (code for end of ray)
112
(Continues on to next ray)
Responder Con Cita
  #4  
Antiguo 18-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gusspagano.

Entendido perfecto lo del archivo de texto y también que se lo almacena en otro formato para ganar espacio. (Y que no tiene nada que ver con la anatomía. )

El problema es saber con que formato es guardado el archivo 'RAW_NA_...', por que de eso depende la interpretación que le demos al leerlo.

Mi pregunta concreta es: ¿ El archivo es generado por un programa de tu autoría o por una aplicación de terceros ?

Si es el primer caso, no veo mucha dificultad ya que con decirnos como se guarda asunto solucionado, pero de otro modo es más complicado.
La opción más sencilla sería buscar el formato en los manuales o comunicarse con el/los autores para consultarlo.
La otra es tratar de inferir el formato a partir de la comparación entre el archivo generado y su equivalente de texto. Pero esto puede ser muy pero muy trabajoso, sobre todo por que es muy probable que se haga algun tipo de compresión de los datos antes de guardarse.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-05-2012 a las 07:59:36.
Responder Con Cita
  #5  
Antiguo 18-05-2012
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
Hola de nuevo,

La aplicación que genera los archivos es del fabricante del radar, ahora, a que te refieres con el "formato"?, (perdón por esta pregunta la verdad se muy poco de informática y programación), se que el archivo es binario y que son palabras de 16 bits según el manual, también conozco el algoritmo de compresión/descompresión (el que según yo podré aplicar una vez tenga el archivo de texto), no se si haga falta saber algo más.

Disculpa si no me doy a entender bien, no se mucho de estas cuestiones.
Responder Con Cita
  #6  
Antiguo 18-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No te disculpes te has explicado perfectamente.

Cuando hablo del formato me refiero a como guarda los datos en el archivo, si se guarda el valor ASCII de de los caracteres, o se empaquetan por algún método (Ocho en siete, suprimiendo caracteres no utilizables, etc.)

En resumidas cuentas, la cuestión es como interpretar los datos almacenados en ese archivo binario. Es decir ¿Que debemos leer ? Un Byte, Integer, Word,... y una vez sabido el tipo que vamos a leer, ¿ Como extraemos cada caracter de allí ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-05-2012 a las 09:12:11.
Responder Con Cita
  #7  
Antiguo 20-05-2012
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
Hola,

Bueno, al parecer se guardan los valores ASCII pues el manual no dice otra cosa, y en cuanto a lo que hay que leer es Word (palabras de 16 bits), ahora, es esto suficiente para convertir a texto??, que función puedo usar??
Responder Con Cita
  #8  
Antiguo 20-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por gusspagano Ver Mensaje
Hola,

Bueno, al parecer se guardan los valores ASCII pues el manual no dice otra cosa, y en cuanto a lo que hay que leer es Word (palabras de 16 bits), ahora, es esto suficiente para convertir a texto??, que función puedo usar??
Hola gusspagano.

Ateniendome a lo que me comentas, una forma de leerlo sería:
Código Delphi [-]
var
  FileWord: file of Word;
  s: string;
  W: Word;
begin
  AssignFile(FileWord, 'C:\TU_RUTA\TU_ARCHIVO.BIN');
  try
    Reset(FileWord);
    with TStringList.Create do
    try
      while not Eof(FileWord) do
      begin
        s:= '';
        repeat
          Read(FileWord, W);
          s:= s + Chr(W);
        until (W = 13) or Eof(FileWord);
        if not Eof(FileWord) then TS.Add(s);
      end
    finally
      // El contenido ya está en TS. 
      // Como ejemplo copio a un Memo y luego libero TS
      Memo1.Lines:= TS;
      TS.Free
    end
  finally
    CloseFile(FileWord)
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 22-05-2012
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
Hola ecfisa,

lo intente pero sigo viendo puros simbolos, voy a checar otra vez el manual y a ver que encuentro, si logro hacer algo lo comento.

Muchas gracias por tu ayuda.
Responder Con Cita
  #10  
Antiguo 05-06-2013
gusspagano gusspagano is offline
Miembro
 
Registrado: mar 2012
Posts: 47
Poder: 0
gusspagano Va por buen camino
Pues bien, después de más de un año, pude convertir mis archivos RAW en TXT. Resulta que el archivo estaba basado en palabras de 16 bits (declaré el archivo como "file of word"), y estructurado en registros (de 6144 bytes cada uno), así que todo lo que leía eran cantidades entre 0 y 65535 (rango de valores de enteros sin signo de 16 bits). Luego, cada uno de esos datos o cantidades leidas correspondía a un valor que aplicando una formula que se encuentra en el manual del radar me da el valor de reflectividad, con el cual ya puedo estimar precipitación.

Por último use el código de compresión que viene en el manual para descomprimir los archivos. El código consiste en reemplazar cadenas de ceros por un número que indica la cantidad de ceros que han sido reemplazados.

Listo, luego solo automaticé el proceso para leer los más de 60 mil archivos RAW y generar imágenes de precipitación acumulada en 24 horas.

Esto probablemente no le interese a muchas personas, pero por si hubiera alguien por ahí que se tope con un problema similar al mio, sepa que si hay una solución, que me costó mucho encontrar, pero finalmente pude hacerlo.

Saludos ecfisa y gracias por tu ayuda.
Responder Con Cita
  #11  
Antiguo 05-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular

.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
decimal a binario luisito2011 C++ Builder 2 05-12-2011 04:43:08
transformar archivo binario a texto pakitto Varios 1 26-11-2008 14:09:45
¿Como convertir un Blob(texto), a un Blob(Binario)? Nelly Varios 2 19-09-2007 22:30:37
Archivos de Texto y binario (manejar) h2o_mx OOP 2 20-04-2006 08:28:55
Convertir Archivos DFM de binario a Texto (Text DFM) DiDi Varios 4 21-04-2005 19:39:43


La franja horaria es GMT +2. Ahora son las 07:38:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi