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!