selma-elec
Messages postés27Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention 5 février 2007
-
2 oct. 2003 à 16:20
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
6 oct. 2003 à 19:56
UN fichier à été créer sur disque avec borland pascal 7.0 avec des enregistrement de ce type :
Type Tata = Record
Chemin : integer;
Nop : integer;
Date_Deb : String[10];
Date_Fin : String[10]
End;
Le fichier est correct et est lu sans problème avec une application en borland pascal toujours. Cette application à dix ans et possède 80000 lignes de codes qui ne posent aucun problêmes !!
/***********************************************/
Aujourd' hui j'ai ecris une petit application en DELPHI avec le
meme record que ci dessus. j'arrive à lire le fichier sans problême jusqu'a Date_Deb. Après les champs contiennent n'importe quoi. Après la lecture du deuxieme STRING[10], on dirait que l'on perd les pédales dans le fichier.
cs_RMD
Messages postés84Date d'inscriptionmercredi 25 septembre 2002StatutMembreDernière intervention21 mai 2004 2 oct. 2003 à 18:10
Borland Pascal 7 ou Delphi, il me semble que les fichiers typés sont gérés de la même façon.
BP7, Delphi1, Delphi2, Delphi 4 et Delphi 5 en tout cas gère les fichiers typés de la même façon.
Ton erreur doit provenir du traitement que tu utilises pour gérer les records.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 2 oct. 2003 à 22:32
Depuis Delphi 5, les structures de type enregistrement sont du type packed record par défaut. Celà peut introduire un décalage dans la longueur des données.
La solution consiste à un introduire un caractère de "remplissage" pour recaler le tout.
Ce problème s'est posé en passant de Delphi 4 à Delphi 5.
De plus, si les enregistrements ont été créés sur un système 16 bits, la longueur des integer est de 2 octets contre 4 sur les sytèmes 32 bits. Si tel est le cas, dans Delphi, je déclarerais des smallint (16 bits signé) au lieu des integer (32 bits signé). Il y a dix ans, les systèmes 32 bits étaient moins courants. ;)
cs_RMD
Messages postés84Date d'inscriptionmercredi 25 septembre 2002StatutMembreDernière intervention21 mai 2004 3 oct. 2003 à 16:47
Tiens, pourtant j'ai migré des programmes de BP7 à Delphi 5 sans problème (?!)
Mais tu as forcément raison pour les integer (les records migrés ne contenaient que des string !).
De toute façon, je n'irai pas te contredire Delphiprog ;o)
selma-elec
Messages postés27Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention 5 février 2007 6 oct. 2003 à 07:49
Merci à tous pour vos réponse.
Mais la solution est là :
- il est vrai que pour migrer un record de BP7 vers DELPHI
les integer de BP7 doivent etre smallint dans DELPHI
( je ne l'avais pas précisé dans la question car cela coulait de source)
- Mais le plus gros problême est que les dernieres version de delphi ne gère pas les record de la même manière que BP7, il ne gère pas les alignement sur les donnés du record par defaut. il faut pour cela utilisé les directives de compilations d'alignement ( $A1 A2 A4 A8 } en utilisant la directive {$A1} tous rentre dans l'ordre il est alors possible de lire et ecrire des record avec toute la compatibilitée de BP7.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 6 oct. 2003 à 19:56
Merci beaucoup pour cette info et pour...avoir répondu à ta question. 8-)
Je pensais à celà en parlant des enregistrements Packed par défaut depuis Delphi 5.
May Delphi be with you