Hay alguna función para convertir un Byte[] a integer? - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html) +--- Tema: Hay alguna función para convertir un Byte[] a integer? (/thread-1657.html) Páginas:
1
2
|
Hay alguna función para convertir un Byte[] a integer? - Harpo - 04-04-2024 Saludos, Necesito poder abrir y leer ficheros DBF. Si, esos en los que están pensando. Estuve buscando un driver ODBC para xBase pero lo que hay es comercial y con periodo de prueba limitado, así que estoy creando mi propio "driver" para DBF en Gambas. El caso es que necesito transformar Byte[] a integer, short, long, y no he visto una función en Gambas que lo haga. Me he hecho una propia, pero entiendo que algo interno de Gambas sería más rápido. Y el rendimiento es importante. Este es el primer borrador, si alguien tiene alguna sugerencia es bienvenida. Código: Private Function ByteToNumber(aDigits As Byte[]) As Long Saludos, Harpo. RE: Hay alguna función para convertir un Byte[] a integer? - Shordi - 04-04-2024 Pues ni idea, oiga. Aún así me parece un hermoso berenjenal ese en el que te estas metiendo. Si lo llegas a conseguir compártelo, plis, que aún conservo unos dbf de los 90 de las aplicaciones que hacía entonces para Clipper 5 y me encantaría poder manejarlos desde Gambas. Saludos RE: Hay alguna función para convertir un Byte[] a integer? - vuott - 04-04-2024 No sé si esta página de la wiki italiana puede ayudarte: https://www.gambas-it.org/wiki/index.php/Ottenere_dai_suoi_singoli_dati-byte_un_valore_numerico_di_tipo_superiore_al_Byte RE: Hay alguna función para convertir un Byte[] a integer? - Harpo - 05-04-2024 Gracias Vuott, un información muy interesante. El uso de un puntero a Byte[].Data es una solución sencilla y elegante. Había buscado en el foro italiano pero no en la Wiki. Shordi, cuando lo tenga más avanzado lo subo. En principio mi necesidad es poder leer DBF, y la estructura no es compleja para versiones de fichero Clipper o dBaseIII. Ya tengo solucionada la parte de cargar la cabecera del fichero y su estructura, que está en formato binario. La parte de cargar y manejar los datos todavía no la tengo decidida, barajo varias opciones. Un saludo, Harpo. RE: Hay alguna función para convertir un Byte[] a integer? - jguardon - 07-04-2024 Puede que no tengas que reinventar la rueda, después de una sencilla búsqueda he encontrado esto: http://sdteffen.de/gtkdbfeditor/ https://github.com/rollinhand/dbf-core https://linux.die.net/man/1/dbview -> (https://pkgs.org/download/dbview) Puede que alguno te sirva y te ahorras un dolor de cabeza... Saludos RE: Hay alguna función para convertir un Byte[] a integer? - Shordi - 08-04-2024 En los repositorios de manjaro existe algo llamado python-dbfread que por lo visto devuelve el dbf legible para python y desde ahí es posible pasarlo a .csv o similar. Como yo de la serpiente na de na, pues no digo más. Saludos. RE: Hay alguna función para convertir un Byte[] a integer? - Harpo - 08-04-2024 Muchas gracias a los dos por la información, ya había explorado esas posibilidades antes de lanzarme al barro. Sigo con ello, ya tengo un primera versión capaz de extraer los datos de un DBF usando solo Gambas. Ahora estoy con el problema de pasar bytes con caracteres en Ascii extendido a algo legible. El problema es este: Código: Public Sub Cadena() Un saludo, Harpo RE: Hay alguna función para convertir un Byte[] a integer? - Shordi - 08-04-2024 Considera éste código: Código: Dim aByte As Byte[] Te da un listado enorme de todas las páginas que convierten bien esa cadena en tu sistema. En el mío el resultado es: 437 850 852 857 858 860 861 863 865 CP-HU CP437 CP773 CP774 CP775 CP803 CP850 CP852 CP857 CP858 CP860 CP861 CP863 CP865 CPIBM861 CSA7-1 CSA7-2 CSASCII CSIBM857 CSIBM860 CSIBM863 CSIBM865 CSPC8CODEPAGE437 CSPC775BALTIC CSPC850MULTILINGUAL CSPC858MULTILINGUAL CSPCP852 CWI-2 CWI IBM437 IBM775 IBM803 IBM850 IBM852 IBM857 IBM858 IBM860 IBM861 IBM863 IBM865 OSF100201B5 OSF1002035D OSF1002035F OSF10020352 OSF10020354 Son un montón, pero dado que los dbf son de cuando MS-DOS en su mayoría, imagino que la página correcta es la 850 o la IBM850 (que imagino que son sinónimas) Así, tu problema se soluciona con la función Conv Código: 'ANA PÉREZ Saludos Más sencillo, quizá, es averiguar cual es la página de códigos del fichero usando el comando file File -bi <mi-fichero de texto> que te responde algo así:text/plain; charset=utf-8 y convertirlo de una con Código: Dim cpage, mifichero, ficheroconvertido As String RE: Hay alguna función para convertir un Byte[] a integer? - paskola - 11-04-2024 Yo lei DBF y escuché tambores en la distancia. Que tiempos aquellos de compilar y salirte a fumar un cigarro en lo que Clipper hacía lo suyo. Es lo que tiene hacerse viejo. Entiendo que mucho de este proyecto es por necesidad y otro tanto por el mero hecho de poder lograrlo, cosa que agradecemos todos los que esperamos aprender de tu proyecto. Yo enfrentado a tal dilema me hubiera ido por la opción fácil de importar los DBF a SQL directamente y desde alli acceder a ellos desde Gambas. Las versiones viejas de SQL Server te permite importarlos, no es trabajo limpio pero es posible. Un saludo y sigo atento este hilo. RE: Hay alguna función para convertir un Byte[] a integer? - Shordi - 11-04-2024 ¡Hombre! Otro colega de los viejos tiempos del Clipper. Creía que era el único por estos lares... Yo comencé a programar en el mundo del PC con el viejo Clipper Summer'87 y de ahí al Clipper 5.1. Con él me labré mi posición en la empresa e hice algunas cosas que para la época eran auténticas maravillas... Bienvenido |