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 19-09-2004
Nebli
 
Posts: n/a
¿ Delphi 7 no es compatible leyendo ficheros con Delphi 30 ?

Cuando comencé programando en Pascal, al pasarme a Delphi 30, tuve un problema al leer ficheros definidos del tipo:

Type
registro10 = Record
nombret : String[35];
domiciliot : String[30];
dnit : String[20];
end;

Un amigo me comentó que había que poner la palabra Packed delante de Record para que Delphi 30 leyese bien los datos.

Type
registro10 = Packed Record
nombret : String[35];
domiciliot : String[30];
dnit : String[20];
end;

Ahora estoy utilizando Delphi 7 y me vuelve a ocurrir lo mismo, no lee bien los ficheros creados con la versión 30.

He probrado a quitarle 'Packed', etc., y todo cuanto se me ha podido ocurrir, pero no lee bien los datos existentes.

Agradecería que alguien me ayudase sobre este tema.

Un saludo. José Luis.
Responder Con Cita
  #2  
Antiguo 19-09-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Ya van por Delphi 30... y yo que creía que lo último era el 8!!
__________________
:)
Responder Con Cita
  #3  
Antiguo 19-09-2004
Nebli
 
Posts: n/a
Quizás no me he explicado bien DarkByte. He comentado que comencé con Pascal, luego pasé a Delphi 30, y ahora he instalado Delphi 7 que venían con los Cds de la versión 8 que es la última que está a la venta, ya que la versión 7 ya no la venden según me dijerono los de Borland.

De todas formas, ahora intentaré utilizar la versión 7, intentando solventando algunos problemas como el que he comentado, y otros que me han aparecido al intentar compilar con Delphi 7 programas hechos con Delphi 30.

Te agradecería DarkByte que si sabes qué ocurre y como solucionar el problema que he planteado que me ayudases.

Un saludo. José Luis.
Responder Con Cita
  #4  
Antiguo 19-09-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Creo que si te entendio solo que, segun el orden cronologico, si vamos por delphi 8, y las versiones anteriores se iban numerando con un numero menos (valga la redundancia), venia el 7, 6, 5..... 1

Pero parece que, por un pequeño error de redaccion, citas a delphi 3 (supongo que es al que te refieres) como delphi 30 (20 + 10, 15 + 15) Percata minuta

Ahora bien, a que te refieres con que no lee los archivos creados en la version anterior? Te refieres a los archivos fuentes del programa, errores de compilacion, o archivos de texto que creaste con la estructura de record que citas mas arriba?
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 20-09-2004
Nebli
 
Posts: n/a
[quote=hector]Creo que si te entendio solo que, segun el orden cronologico, si vamos por delphi 8, y las versiones anteriores se iban numerando con un numero menos (valga la redundancia), venia el 7, 6, 5..... 1

Hola, Hector.

Debe ser que no me he explicado bien con lo de las versiones.

El problema que tengo es que con la versión 30, que es con la que estaba trabajando hasta hace unos días !!!, hice un programa que me permitía guardar datos de diversos tipos, como String, Integer, etc, según una estructura previamente definida con Type.

Ese programa ha estado funcionando bien, pero cuando lo he querido mejorarlo al conseguir la versión 7 de Delphi, al compilar las mejorar hechas y ponerme a trabajar con la nueva versión del programa ya compilado, resulta que esta nueva versión del programa que ha creado Delphi 7, no lee bien los datos que el programa hecho con la versión de Delphi 30 había guardado.

Me quedé muy sorprendido, porque suponía que la única diferencia que debía existir de compilar el programa con una versión de Delphi o con otra más reciente, era el que a la hora de programar se trabajaría mejor, pero resulta que algunos de los programas que he compilado con Delphi 7, sin cambiar nada de como estaba el código fuente de Delphi 30, no me funcionan.

En el ejemplo que pongo, tengo la sensación que no se respenta el tamaño de los diversos tipos de datos que hay en el Record, y lee más cantidad de la que debería de leer, por lo que el siguiente registro, ya no es leído bien y así sucisivamente.

Espero vuestra ayuda. Un saludo. José Luis.
Responder Con Cita
  #6  
Antiguo 20-09-2004
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
Cita:
Empezado por Nebli
El problema que tengo es que con la versión 30, que es con la que estaba trabajando hasta hace unos días !!!, hice un programa que me permitía guardar datos de diversos tipos, como String, Integer, etc, según una estructura previamente definida con Type.

Ese programa ha estado funcionando bien, pero cuando lo he querido mejorarlo al conseguir la versión 7 de Delphi, al compilar las mejorar hechas y ponerme a trabajar con la nueva versión del programa ya compilado, resulta que esta nueva versión del programa que ha creado Delphi 7, no lee bien los datos que el programa hecho con la versión de Delphi 30 había guardado.

[...]

tengo la sensación que no se respenta el tamaño de los diversos tipos de datos que hay en el Record, y lee más cantidad de la que debería de leer, por lo que el siguiente registro, ya no es leído bien y así sucisivamente.
Qué lio con esto de las versiones. Supongo que por 30 te refieres a 3.0. De cualquier forma les notifico que vamos en la versión 16 y no lo digo yo sino el mismo Borland: ejecuten el compilador en línea y lean qué número de versión es.

En cuanto al problema que nos ocupa, aunque no estoy seguro me da la impresión de que tiene que ver con los string. Hasta alguna versión, quizá justamente la 3, el tipo de datos string correspondía a lo que hoy conocemos como ShortString, es decir, una cadena de longitud fija de 255 bytes. Actualmente el tipo string corresponde a cadenas dinámicas, esto es, cadenas de caracteres con una longitud dinámica.

Si el problema va por ahí podrías cambiar los campos string de tus record por ShortString e incluso agregar condicionales del compilador para compilar correctamente en una u otra versión de Delphi.

EDITO:

El cambio a cadena dinámica afecta al tamaño de los record porque ahora un string es, en el fondo, un apuntador y por tanto ocupa sólo cuatro bytes.

// Saludos

Última edición por roman fecha: 20-09-2004 a las 21:26:55.
Responder Con Cita
  #7  
Antiguo 21-09-2004
Nebli
 
Posts: n/a
Hola Roman.

Te agradezco la información que me has dado. Tengo que decirte que gracias a ella, he estado buscando en la ayuda de Delphi y he visto que los números reales, que en la versión 3.0 se denominan Real, ahora, en la versión 7, se denominan Real48.

Como yo no había cambiado los nombres de Real por Real48, cuando leía los ficheros, en lugar de leer 6 bytes, que ocupaban los números 'reales' en la versión 3.0, ahora estaba leyendo 8 bytes, que son los que ocupan los números 'reales' en la versión 7.

Por ese motivo no se leían los datos bien, y como es natural, los datos presentados en pantalla no se correspondían con lo que debía haber.

Te agradezco a tí y a todos los demás la ayuda prestada.

Un saludo. José Luis.
Responder Con Cita
  #8  
Antiguo 21-09-2004
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
Cita:
Empezado por Nebli
Como yo no había cambiado los nombres de Real por Real48, cuando leía los ficheros, en lugar de leer 6 bytes, que ocupaban los números 'reales' en la versión 3.0, ahora estaba leyendo 8 bytes, que son los que ocupan los números 'reales' en la versión 7.
En este caso podrías optar por usar la directiva de compilación

{$REALCOMPATIBILITY ON}

con lo cual el tipo Real será el de seis bytes evitándote cambiar a Real48 todas las declaraciones que tengas.

O bien ajustar el código que manipula los registros para trabajar con los reales de 8 bytes.

// Saludos
Responder Con Cita
  #9  
Antiguo 23-09-2004
Nebli
 
Posts: n/a
Hola Roman.

Ya he probado a usar esa directiva, pero se me queda colgado Delphi y no responde.
He optado por cambiar los 'Reales' que impedian el correcto funcionamiento y ahora funciona bien. ¡¡ Espero !!. Fueron unos 15 minutos.

Gracias de nuevo.

Un saludo de José Luis.
Responder Con Cita
  #10  
Antiguo 23-09-2004
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
Cita:
Empezado por Nebli
Fueron unos 15 minutos.
¿Quince?

¿Qué pasó con Edit|Replace|Replace All?



// Saludos
Responder Con Cita
  #11  
Antiguo 25-09-2004
Nebli
 
Posts: n/a
Fueron 15 minutos porque se encontraron 1319 'reales' de los que se cambiaron 948 a 'real48'.

Gracias a 'replace all' cambiando todas las palabras 'reales' que estaban en un Type, empezando desde el cursosr hacia arriba, se hizo 'bastante rapido'.

Un saludo Roman.

Última edición por Nebli fecha: 25-09-2004 a las 16:14:50. Razón: Corregir el texto original con algunos detalles
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


La franja horaria es GMT +2. Ahora son las 18:01:36.


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