Discussion:
Extraer datos de un archivo .DAT a un formato estándar
(demasiado antiguo para responder)
Daniel Del Giudice
2008-06-30 12:13:42 UTC
Permalink
Hola a todos:

desarrollo en otro lenguaje y me encontré con unos archivos .dat generados
desde visual basic que contienen información que debo pasar a un formato
estándar, por ejemplo texto plano o excel. Sé que debe ser una tontera pero
no sé cómo hacerlo y la última vez que trabajé con basic fue en mi Commodore
64 hace más de 20 años. Por favor, es urgente y estoy desesperado. Desde ya
muchas gracias.

Daniel
Leonardo Azpurua
2008-06-30 22:03:08 UTC
Permalink
Post by Daniel Del Giudice
desarrollo en otro lenguaje y me encontré con unos archivos .dat generados
desde visual basic que contienen información que debo pasar a un formato
estándar, por ejemplo texto plano o excel. Sé que debe ser una tontera
pero no sé cómo hacerlo y la última vez que trabajé con basic fue en mi
Commodore 64 hace más de 20 años. Por favor, es urgente y estoy
desesperado. Desde ya muchas gracias.
Daniel
Hola, Daniel:

Desafortunadamente, .DAT es una extensión utilizada por cualquiera. VB6 no
maneja un tipo estandarizado de archivo de datos.

¿Intentaste estudiar el contenido de los archivos? ¿Sabes si la aplicación
utiliza algún manejador de archivos de terceros (al estilo de BTrieve, por
ejemplo)?

No es una tontera (a menos que los archivos en cuestión usen algún formato
estandarizado y dispongas de una herramienta que te permita exportarlos).

Si tienes alguno de esos archivos que no pese demasiado (20K es un límite
bien aceptable) trata de postearlo a ver si alguien reconoce algo.

Pero la extensión .DAT, desafortunadamente, no dice demasiado por si sola.


Salud!
gustavo gutierrez morales
2008-06-30 13:41:49 UTC
Permalink
Pueden haber sido generados desde vb, pero seguramente pertenecen a algún
formato de base de datos. Si logras averiguar de cuál se trata, puedes hacer
el vaciado, aún sin usar vb.
saludos,
Post by Daniel Del Giudice
desarrollo en otro lenguaje y me encontré con unos archivos .dat generados
desde visual basic que contienen información que debo pasar a un formato
estándar, por ejemplo texto plano o excel. Sé que debe ser una tontera
pero no sé cómo hacerlo y la última vez que trabajé con basic fue en mi
Commodore 64 hace más de 20 años. Por favor, es urgente y estoy
desesperado. Desde ya muchas gracias.
Daniel
Leonardo Azpurua
2008-07-01 00:17:11 UTC
Permalink
Gracias a todos por responder. Ahí les adjunto una muestra, ya con pocas
esperanzas de que resulte una tarea facil. Los archivos .DAT van
acompañados de uno o más archivos .IND.
Hola.

El archivo .DAT contiene registros de proveedores, comenzando en la posición
55H (85).

Los registros de datos tienen una longitud estándar de 0x121 (289 bytes).
Las cadenas están terminadas en cero (aunque la aplicacion esté desarrollada
con VB, el manejo de datos parece haber sido escrito con "C").

Aparentemente la distribución de las columnas alfanumericas es esta:

Offset Longitud Contenido
0 30 Nombre o razon social
31 20 Direccion o parte de la direccion (LARRAYA 1666)
51 32 Podría ser un nombre de persona o de pueblo
91 2 Valor de tipo integer (?)
93 30 Secuencia de numeros o dígitos parecida a un RIF,
NIT, CUIT
como quiera que se llame en tu tierra.
... (me dio flojera seguir).

A falta de un editor hexadecimal más eficiente (es lo único que echo de
menos de las Norton Utilities para MS-DOS) puedes usar DEBUG.EXE (en mi XP
viene en C:\Windows\System32) para examinar el contenido de tus archivos.

Despues de que tengas una idea del mapa de cada registro (lo más peliagudo
son los segmentos de datos binarios, por lo general números), puedes
escribir un programa parecido a esto (basado en lo que encontré mediante el
examen físico de los registros):

' El tipo representa más o menos el mapa de los registros
Type RegistroProveedor
Nombre As String * 30
Direccion1 As String * 30
Direccion2 As String * 30
Unknow1 As Integer
Nit As String * 30
Resto As String * 167 ' lo que falta para completar los 289
End Type

' Elimina los nulos (Chr(0)) a continuación de un string
Private Function StripEOS(s As String) As String
Dim r As String, p As Integer
r = s
p = InStr(1, r, Chr(0))
If p Then _
r = Left(r, p - 1)
StripEOS = r
End Function

' Envía algunos datos del registro a la ventana inmediata
Private Sub Dump(r As RegistroProveedor)
Debug.Print StripEOS(r.Nombre) & "/"; _
StripEOS(r.Direccion1) & "/"; _
StripEOS(r.Direccion2) & "/"; _
StripEOS(r.Nit)
End Sub


' Rutina principal:
Public Sub Main()
Dim elRegistro As RegistroProveedor
Open "C:\PROVEE.DAT" For Binary As #1
Seek 1, 86
Do While Not EOF(1)
Get #1, , elRegistro
Dump elRegistro
Loop
Close 1
End Sub


Parte de la salida del archivo que enviaste (PROVEE.DAT) es ésta:

QUIMICA LIMBADI SRL/LARRAYA 1666/RAFAEL CASTILLO /30-57611387-7
FASTENER SRL/AVALOS 2651/MUNRO/30-64619264-8
ELECTRO CVC/E. ZEBALLOS 4386/SANTA FE /20-08280061-2
F.GENERAL PAZ S.R.L/25 DE MAYO N° 55/FREYRE/30-70729715-4
ABRASIVOS CORDOBA/OLIVIO LAGOS 456/CORDOBA/20-08268026-9
ROGELIO CACHAN/SAN MARTIN 2646/ROSARIO /20-08599897-9
ACYTRA S.A.I.C./AV. CARAFFA 2541/CORDOBA/30-50218578-7
CONTAINER S.R.L./SAN MIGUEL 844/CAPITAL/33-67317578-9
CASCALA S.A./OLAVARRIA N°2663/PROVINCIA DE BS. AS./30-50395857-7

Si te pagan bien, o si no tienes más remedio que hacerlo, puede ser un
trabajo bien divertido (me entretiene muchísimo hacer este tipo de cosas).


Salud!

Continúe leyendo en narkive:
Loading...