![]() |
From turbo pascal to delphi6
Tengo un porgrama escrito con turbo pascal 7. Para escribir un fichero (una bioseñal) que tiene dos partes (un encabezamiento y un cuerpo) utiliza el siguiente record para el encabezamiento:
Después del usuario entrar los datos, la variable dattst (de tipo tsttype) es escrita en un ficherode esta manera:
Entonces:
para comenzar a escribir el cuerpo del fichero (enteros) después del encabezamiento. Hata aquí todo está bien en turbo pascal 7. El módulo de procesamiento lee bien el fichero resultante. Ahora, utilizo el mismo código con Delphi6 de la misma forma, escribo el fichero, pero cuando voy a abrirlo recibo un runtime error y el programa aborta. Al ver un fichero original y el que hago con delphi con un editor hexadecimal, son diferentes (el tamaño del encabezamiento, por ejemplo). ¿Qué puede estar pasando y cómo lo resulevo? Cualquier otro dato, o si hace falta un fichero de muestra, por favor pedirlo. Gracias por adelantado R. Sanchez |
Hola,
Bienvenido al ClubDelphi Roberto. Por favor, revisa la guía de estilo de estos Foros. Echa un vistazo a cómo puedes conseguir resaltar la sintaxis del código fuente de Delphi cuando lo incluyas en tus mensajes. En este caso he editado tu mensaje para encerrar el código entre sus correspondientes etiquetas. Basta conque encierres tu código fuente entre las etiquetas [ DELPHI ] y [ /DELPHI ] (sin dejar espacios, que aquí los dejo yo para que se vean las etiquetas y no se tomen como lo que son realmente. |
Hola
Intenta declararlo como packed :confused: Saludos |
Dos preguntas:
Después de escribir el encabezado, ¿por qué mueves el puntero? write deja el puntero al final de lo que escribes. Y, en todo caso, ¿por qué lo mueves la mitad del encabezado y no todo el encabezado? También sería úitl que dijeras cuál es el código de error. De hecho, puedes ver una lista de ellos buscando I/O Errors en la ayuda de Delphi. // Saludos |
De pascal a Delphi 6
Cita:
Cita:
He observado algunas cosas, ejemplo, los valores del cuerpo del fichero, declarados como Integer en turbo pascal, en Delphi 6 tengo que declararlo como Word, con la misma línea de pensamiento he probado con el encabezamiento, pero no he encontado la solución. Gracias mil R. Sánchez |
De pascal a Delphi 6
Hola,
Según me dice un amigo, el integer de pascal, corresponde al smallint en delphi. Pero con ese cambio sigue sin que los ficheros fabricados sean leidos por el programa en pascal. ¿Qué es packed? Gracias R. Sánchez |
¡Hola a todos!
Cita:
Una manera de impedir que el compilador haga esta alineación es declarar la estructura en cuestión como Packed Record. De hecho eso es lo recomendable cuando tal estructura se utilizará en procesos de almacenamiento y lectura de información en disco. El tamaño de un registro compacto (packed) es la suma del tamaño de sus campos, mientras que un registro alineado (no compacto) suele contener algunos bytes adicionales. Un abrazo compacto. Al González. :) |
También hay cambios en los tipos de datos. El tipo integer de turbo pascal era un entero de 16 bits, pero el tipo integer de delphi (a partir del 3) es un entero de 32 bits. Esto debido a que Integer es, por decirlo de alguna manera, un tipo de dato "dependiente" de la plataforma.
Esto quiere decir que cuando tengamos un compilador de delphi para 64 bits, el tipo integer será un entero de 64 bits. El tipo no dependiente de la plataforma, entero de 16 bits, se llama SmallInt. No lo tengo claro ahora, pero es probable que algo similar pase con el boolean. Hasta luego. ;) |
Hola nuevamente.
Cita:
No recuerdo ya de pascal 5.5, pero es probable que en este todos los registros fueran no alineados ("packed"). Cita:
Hasta luego. ;) pd. (Un abrazo condicional. :D ) |
Riesgo de incompatibilidad
¡Hola a todos!
Cita:
Cita:
Cita:
Un abrazo balanceado. Al González. :) |
De pascal a Delphi 6
Gracias por sus consejos. Pruebo los cambios que mencionan y aprendo.
Haré saber logros y tropiezos en busca de la solución R. Sánchez pd. Un abrazo incondicional y ... |
La franja horaria es GMT +2. Ahora son las 00:26:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi