Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2006
Roberto Sánchez Roberto Sánchez is offline
Registrado
 
Registrado: ago 2006
Posts: 4
Poder: 0
Roberto Sánchez Va por buen camino
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:

Código Delphi [-]
TSTTYPE=record
        pacname:string[25];
        hcl    :string[11];
         dia    :integer;
         mes    :integer;
         ano    :integer;
         time   :string[4];
         testype:string[25];
         period :real;
         minut  :integer;
         segun  :integer;
         nochanel :integer;
         chanel  :array[1..maxchanel-1] of chanel; //maxchanel=9 (a constant)
         obs     :array[1..3] of obs; //OBS=STRING[44]
         tpr     :real;
         pesobit :array[1..maxchanel-1] of real;
         units   :array[1..maxchanel-1] of unid; // UNID=STRING[4];
         codgrab :byte;
         chanels :array[1..maxchanel-1] of byte;
         status  :boolean;
         end;

Después del usuario entrar los datos, la variable dattst (de tipo tsttype) es escrita en un ficherode esta manera:

Código Delphi [-]
   write(FICHTST,DATTST);

Entonces:

Código Delphi [-]
   seek(fichint,round(sizeof(DATTST)/2));

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

Última edición por dec fecha: 29-08-2006 a las 04:31:21.
Responder Con Cita
  #2  
Antiguo 29-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 29-08-2006
Northern Northern is offline
Miembro
 
Registrado: ene 2006
Posts: 211
Poder: 19
Northern Va por buen camino
Hola

Intenta declararlo como packed


Saludos
Responder Con Cita
  #4  
Antiguo 29-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 30-08-2006
Roberto Sánchez Roberto Sánchez is offline
Registrado
 
Registrado: ago 2006
Posts: 4
Poder: 0
Roberto Sánchez Va por buen camino
De pascal a Delphi 6

Cita:
Empezado por roman
Después de escribir el encabezado, ¿por qué mueves el puntero? write deja el puntero al final de lo que escribes.
El fichero es primero abierto como tsttype, se escribe el encabezamiento y entonces es abierto como enteros para escribir el cuerpo. Supongo que al cerrarlo y volverlo a abrir, pero como enteros, el SizeOf del encabezamiento haya sido calculado de esa manera en turbo pascal para situar el puntero en el lugar adecuado (al final del encabezamiento).

Cita:
Empezado por roman
También sería útil 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.
El fichero fabricado con este programa en turbo pascal está OK y lo abre bien el módulo de procesamiento (hecho también con turbo pascal). Ahora, cuando ese mismo fichero lo hago con Delphi 6, ese módulo no lo puede abrir y el error que da, no alcanzo a verlo (un runtime error del turbo pascal).
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
Responder Con Cita
  #6  
Antiguo 10-09-2006
Roberto Sánchez Roberto Sánchez is offline
Registrado
 
Registrado: ago 2006
Posts: 4
Poder: 0
Roberto Sánchez Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 11-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 11-09-2006 a las 18:41:05.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar la libreria crt.dcu de Turbo Pascal 7 en delphi 2205 nunez1984 API de Windows 10 08-03-2010 04:36:34
Las Turbo Tools estan devuelta :) Epachsoft Noticias 54 25-12-2006 02:39:13
manual de excepciones de object pascal para free pascal??? Garion OOP 3 27-05-2005 00:42:29
compatibilidad entre Turbo Pascal 7 y Delphi 7 !! Jat Varios 0 13-12-2004 23:24:34
Instalar TpOrpheus de Turbo Power Delfino OOP 3 18-10-2003 11:19:08


La franja horaria es GMT +2. Ahora son las 04:19:13.


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
Copyright 1996-2007 Club Delphi