Ir al contenido


Foto

¿Cómo leer archivos .DAT?


  • Por favor identifícate para responder
13 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 febrero 2009 - 09:13

Hola compañeros, ¿algunos de ustedes saben cómo leer un archivo .DAT?, porque cuando lo abro con wordpad o notepad, sólo me aparecen algunos cuadritos, ¿existe algún manejador de ese tipo de datos?.

Saludos.
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 06 febrero 2009 - 09:43

esos son archivos binarios, y al menos que conozcas su estructura no creo que puedas hacer mucho.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 febrero 2009 - 09:46

esos son archivos binarios, y al menos que conozcas su estructura no creo que puedas hacer mucho.


Bueno, esos datos los saco desde un Lector Dactilar de control de asistencias, y éste es el archivo que deja la cual anexo, a ver si alguien me da un empujoncito.

Saludos.

Archivos adjuntos

  • Archivo adjunto  275_.zip   1,38KB   26 descargas

  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 06 febrero 2009 - 10:47

Saludos.

Lo abrí con Notepad y Excel y sale sin formato.

No lo he probado pero prueba en Delphi con un TStringList a ver si sale algo.

Sigue comentando los avances.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 febrero 2009 - 10:57

No es mala idea usar un TStingList, pero el asunto sería, ¿cuál es el delimitador en este caso?, pues no se ve a simple vista.

Saludos.
  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 06 febrero 2009 - 11:10

Hola

¿Y no te sería más sencillo preguntar al fabricante? Si es un archivo binario, deducir cómo está formado puede llegarte a costar bastante (en tiempo sobretodo)

Espero te sirva

Nos leemos

  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 06 febrero 2009 - 11:11

Saludos.

Enecumene encontre este articulo mira a ver si te sirve.
  • 0

#8 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 06 febrero 2009 - 03:56

Pues yo lo único que saco en claro es que hay un tal Ramón metido en el asunto  :p

Por lo demás el archivo esta plagado de ceros, es decir del carácter #0, así que un TStringList no te lo va a leer bien. Es evidente que los datos están guardados de forma binaria, y para saber como esta guardada la información tienes que saber con precisión que datos se guardan y así poder deducir que es cada cosa. Pero aun así es una tarea complicada.
  • 0

#9 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 07 febrero 2009 - 08:39



delphi
  1. type
  2. TStruct = record
  3.   wIndex: Word;
  4.   bFlag: Byte;
  5.   cbValue: array [0..7] of Char;
  6.   cbName: array [0..27] of Char;
  7.   bValue: Boolean;
  8.   qwAlwaysZero: Int64;
  9.   Value: array [0..23] of Char;
  10. end;
  11.  
  12. procedure TForm1.Button1Click(Sender: TObject);
  13. var
  14. hFile, Size, Count, Index, Value, Hours: Cardinal;
  15. Item: array of TStruct;
  16. begin
  17. hFile := _lopen('user.dat', OF_READ);
  18. Size := GetFileSize(hFile, nil);
  19. Count := Size div SizeOf(TStruct);
  20. SetLength(Item, Count);
  21. _lread(hFile, Item, Size);
  22.  
  23. ListBox1.Clear;
  24. Caption := Item[0].cbName;
  25. for Index := 0 to Count - 1 do
  26.   begin
  27.   Value := StrToInt(Item[Index].Value);
  28.   Hours := Value div 3600;
  29.   Value := Value mod 3600;
  30.   ListBox1.AddItem(IntToStr(Item[Index].wIndex) + '(' + Item[Index].Value + ') - ' + IntToStr(Hours) + ':' + IntToStr(Value div 60) + ':' + IntToStr(Value mod 60), nil);
  31.   end;
  32. end;



La anterior es una estructura "creada" por mi, pero notarás que es bastante congruente. La forma en que proceso "Value" se me ocurrio al ver el rango de dicho valor (puede ser el tiempo de retraso), aunque eso solo lo podras notar tu.

Salud
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 febrero 2009 - 10:34

Gracias Chackall, me ha funcionado de pelos (y) :D, eres un genio.

Saludos.
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 febrero 2009 - 12:23

Hola

Estuve mirando el código y la estructura que creaste Little Bro y no necesito decirte que me impresiona, solo tengo una duda, como identificaste el wIndex porque me imagino que ese es el que nos servirá para determinar el tamaño del "registro", y de esa forma saber que son 72 bytes por cada registro.

Salud OS
  • 0

#12 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 07 febrero 2009 - 02:11

creo haberle entendido por lo poco que hable con el que tiene lectores binarios y hexadecimales que le permitieron definir el registro.  De todas formas cuando entre de nuevo nos explicara mejor
  • 0

#13 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 07 febrero 2009 - 02:29

Lo primero fue abrir el archivo con un visor/editor que me muestre el contenido en forma ASCII/binaria/exadecimal, en los casos mas sencillos se puede notar a simple vista que se forman “lineas imaginarias” con el contenido del archivo, lo que nos sugiere que dicho archivo contiene registros de dimensión fija.

Imagen Enviada

Como en casi todos los formatos de archivo, inferí que “RAMON” pertenecía a parte del cabezal del archivo el cual siendo también una estructura, no debiese tener el mismo formato que el resto de las “estructuras” del archivo, entonces analice posibles registros con formato parecido, entonces note que había alguna alineación de 4 u 8 Bytes.;

Imagen Enviada

Asc;0:0;0;0;0;Dec;0;0;0;0;0;0;0;0;0;0;0;Asc;0:0;0;0;0;Dec;0;0;0;0;0;0;0;0;0;0;0;Asc;…

Hasta el final del archivo se puede ver la misma secuencia, del cual el mínimo común es de 18 DWORDs (72 Bytes); una prueba de modulo con el tamaño del archivo confirma la suposición y formula una nueva duda acerca del supuesto cabezal o formato de los primeros registros. Esto sumado a un vistazo a la cola del archivo suponemos (y probamos) la nueva estructura;

Dec;0;0;0;0;0;0;0;0;0;0;0;Asc

Imagen Enviada

De aquí en adelante la estructura final la hice con la ayuda del depurador de Delphi procurando siempre usar el máximo de tamaño en los tipos de datos de la estructura para que se vea mas “limpia”.

Salud
  • 0

#14 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 febrero 2009 - 02:50

Hola
Solo decir lo que ya he dicho muchas veces, genial amigo. (y)
Saludos
PD: Como me gusta cuando explicas lo inentendible. :D
  • 0




IP.Board spam blocked by CleanTalk.