Jump to content


Photo

¿Cómo leer archivos .DAT?


  • Please log in to reply
13 replies to this topic

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 06 February 2009 - 09:13 AM

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
  • 4483 posts
  • LocationVenezuela

Posted 06 February 2009 - 09:43 AM

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

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 06 February 2009 - 09:46 AM

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.

Attached Files

  • Attached File  275_.zip   1.38KB   26 downloads

  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 06 February 2009 - 10:47 AM

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
  • 7419 posts
  • LocationRepública Dominicana

Posted 06 February 2009 - 10:57 AM

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 posts
  • LocationEspaña

Posted 06 February 2009 - 11:10 AM

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
  • 2092 posts
  • LocationRepública Dominicana

Posted 06 February 2009 - 11:11 AM

Saludos.

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

#8 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 06 February 2009 - 03:56 PM

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 posts

Posted 07 February 2009 - 08:39 AM



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
  • 7419 posts
  • LocationRepública Dominicana

Posted 07 February 2009 - 10:34 AM

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
  • 14469 posts
  • LocationMéxico

Posted 07 February 2009 - 12:23 PM

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
  • 4483 posts
  • LocationVenezuela

Posted 07 February 2009 - 02:11 PM

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 posts

Posted 07 February 2009 - 02:29 PM

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
  • 4266 posts
  • LocationCosta Rica

Posted 07 February 2009 - 02:50 PM

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.