Desempaquetar campos numéricos comprimidos de archivo
Hola a tod@s.
Necesito leer un fichero creado con btrieve para pasarlo a mi aplicación. Con la instrucción BUTIL saco los registros a un fichero de texto pero me encuentro con que los campos numéricos están empaquetados. Para los que conozcan el BASIC quiero recordar que se empaquetaban/desempaquetaban con la instrucción cvi/cvs mki/mks. ¿Hay alguna manera desde Delphi de poder leer y desempaquetar estos campos o me tendré que preparar un programita en BASIC (horror porque no me acuerdo de nada)? Dejo aquí un archivo de muestra por si a alguien le hace chiste y le echa un vistazo. Gracias y un saludo |
|
Gracias, le echaré un vistazo y te cuento.
|
Parece que estos programas lo que hacen es algo similar al BUTIL que viene con las BTRIEVE que es generar un fichero de texto a partir del fichero original pero no me resuelve el problema de los números empaquetados.
Seguiremos buscando la forma. |
"Números empaquetados", ¿te refieres a big endian y little endian?
Código:
unsigned long blockLength = *blockLengthPtr++ << 24; |
Mira esta página, creo que ahí tienes la solución Y aquí un ejemplo sencillo, que en teoría funciona;
|
Hola newtron
Hasta donde recuerdo (usé btrieve y butil en los 90's) y el butil te generaba un archivo csv de la info, voy a escarbar en mis respaldos a ver si conservo aún la linea de comandos que usaba para eso, aunque era para DOS, no se si cambiaron algo en esos programas. Saludos |
Veamos, creo que esto:
Mira los ejemplos de shr y shl en http://www.delphibasics.co.uk |
Gracias egostar, el archivo ya lo tengo extraido con BUTIL. El problema que tengo es que dentro del registro hay campos numéricos empaquetados que no sé cómo extraerlos desde delphi. Esto en basic se hacían con unas instrucciones que no sé si tienen equivalencia en delphi.
En la imagen se ve un ejemplo del archivo en el que los muñecos de ciertos campos son los campos numéricos que os comento. Casimiro, no sé si esto que me indicas sirve para lo que estoy buscando, lo estudiaré un poco porque por encima no me entero de qué va. Gracias y un saludo. |
Entiendo,
La otra opción es utilizar el manejador de bases de datos Btrieve, se llama Xtrieve, aunque lo que yo usé era para DOS, desconozco si tienes esa herramienta y desconozco si aún existe o se pueda descarga libremente. Por cierto, hasta donde recuerdo, los tipos decimales son BCD, y me parece que BUTIL exporta los valores numéricos (decimal, entero) como binarios. Saludos |
Será mucho pedir preguntar si tienes el código fuente de esas funciones cvi/cvs mki/mks :)
Para saber qué hacen exactamente y así crear unas similares para delphi. O por lo menos, si supiésemos cómo empaqueta esos números. |
Cita:
A ver si algún amable (y senior) forero que haya programado con versiones antiguas de basic le suena esto y me puede dar norte, si no, tendré que preparar un programita en basic que lea ese fichero, desempaquete los datos y me vaya generando otro con los números en modo carácter. Gracias y un saludo |
¿Entonces son 4 dígitos y lo que hay almacenado es un número con decimales?.
|
Cita:
|
La franja horaria es GMT +2. Ahora son las 18:43:05. |
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