Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.13;
Скачать: CL | DM;

Вниз

Считывание данных из файла   Найти похожие ветки 

 
viko ©   (2002-06-03 03:36) [0]

Здравствуйте ! У меня вот такой вопрос.
На шестом Паскале под ДОС написана прога которая создает на диске типизированный файл и записывает в него переменные (текст ниже). На делфи 1.6 данные удается вытащить без проблем, а на пятой ну ни как. Может что с кодировкой ДОС или с разным форматом описания переменных в делфи в отличии от паскаля. Я уже испробовал все, ничего не получается.Кто сможет помогите , очень нужно. Заранее благодарен.


type
str80=string[80];
str8=string[8];
g30=array[1..30]of integer;
mas41=array[1..41] of real;
imas41=array[1..41] of integer;
r24=array[0..23]of real;
i24=array[0..23]of integer;
type zapstk=record
zwr_re:byte;
zmashtabk:real;
zmaxm:real;
zttstart,zfl:str8;
ztssec:longint;
zktp,zkolminut:integer;
zplase:str80;
zwkua,zwkub,zwkuc,zwkia,zwkib,zwkic,zkolfaz:byte;
zktn,zktt,zunf:real;
zinterval:integer;
zhtek,zmtek,ztsh,ztsm,zsyear,zsmonht,zsday,
zend_year,zend_month,zend_day:word;
zsum_izm:integer;
zmodua,zmodub,zmoduc,zckdua,zckdub,zckduc,zmodu1p,
zckdu1p,zmok2p,zmok0p,zckk2p,zckk0p,
zmoknca,zmokncb,zmokncc,zckknca,zckkncb,zckkncc:real;
zgknca,zgkncb,zgkncc,zgk0p,zgk2p,zgdu1p:g30;
zsuavp,zsubvp,zsucvp,zsquavp,zsqubvp,zsqucvp:mas41;
zd1upl,zd1umi,zd2upl,zd2umi:real;
zsd1akns,zsd2akns,zsd1bkns,zsd2bkns,zsd1ckns,zsd2ckns,
zsd1k0,zsd2k0,zsd1k2,zsd2k2,zsd1du1p,zsd2du1p:integer;
zsd2ga,zsd2gb,zsd2gc:imas41;
zkns_lt,zkns_rt,zk2_lt,zk2_rt,
zk0_lt,zk0_rt,zdu_lt,zdu_rt:integer;
zdu_24,zkns_24,zk2_24,zk0_24:r24;
zt_24:i24;
end;


var
fstk:file of zapstk;
zs:zapstk;


 
MBo ©   (2002-06-03 06:45) [1]

В delphi5 Integer занимает 4 байта, а в TP и Delphi1 - 2.
Используй вместо Integer в D5 SmallInt - аналог TP-Integer.
Кроме того, Real был 6-байтовый, теперь по умолчанию 8.
Используй Real48.


 
Anatoly Podgoretsky ©   (2002-06-03 10:25) [2]

И еще вот это

type zapstk=record

первое type здесь лишнее, не ошибка но все таки
втора проблема выравнивание, может поможет

zapstk= packed record

но может и нет, тогда придется бороться ы сврывнивание на контрольных записях, а все началось с бардака в голове у программиста, который решил использовать generic типы, вместо fundamental и понятия не имеет о выравнивании.



 
PVOzerski ©   (2002-06-03 11:33) [3]

1) record переправляем на packed record;
2) integer меняем на smallint;
3) надо бы как-то прочесть real 6-битный... Вот этого не делал. Нашел специально для Вас
в Сети описание внутреннего представления real и double, вот и колдуйте.

Вещественный тип

Шестибайтовое (48-битовое) вещественное число (Real) подраз-
деляется на три поля:
1 39 8
+---+------..-------+--------+
| s | f | e |
+---+------..-------+--------+
msb lsb msb lsb

Значение v числа определяется с помощью выражений:

if 0 < e <= 255, then v = (-1)^s * 2^(e-129)*(l.f).
if e = 0, then v = 0.

Вещественный тип не может использоваться для хранения ненор-
мализованных чисел, значений, не являющихся числом (NaN), а также
бесконечно малых и бесконечно больших значений. Ненормализованное
число при сохранении его в виде вещественного принимает нулевое
значение, а не числа, бесконечно малые и бесконечно большие зна-
чения при попытке использовать для их записи формат вещественного
числа приводят к ошибке переполнения.
Здесь и далее msb означает более значащий бит (старшие раз-
ряды), lsb - менее значащий (младшие разряды).

Тип числа с двойной точностью

Восьмибайтовое (64-битовое) число типа Double подразделяется
на три поля:
1 11 52
+---+------+-------..--------+
| s | e | f |
+---+------+-------..--------+
msb lsb msb lsb

Значение v этого числа определяется с помощью выражений:

if 0 < e < 2047, then v = (-1)^s * 2^(e-1023) * (l.f).
if e = 0 and f <> 0, then v = (-1)^s * 2^(1022) * (o.f).
if e = 0 and f = 0, then v = (-1)^s * O.
if e = 2047 and f = 0, then v = (-1)^s * Inf.
if e = 2047 and f <> 0, then v = NaN.



 
MBo ©   (2002-06-03 11:36) [4]

>real 6-битный
А чего колдовать - Real48



Страницы: 1 вся ветка

Текущий архив: 2002.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-40014
Валет
2002-06-03 17:19
2002.06.13
Поиск в StringList


3-39951
начинающий програмер
2002-05-18 16:00
2002.06.13
из DBGRID в MEMO


1-39996
[BAD]Angel
2002-06-03 15:05
2002.06.13
Нужна помошь с поиском хэндла меню...


6-40143
Теня
2002-04-03 12:38
2002.06.13
Как проверить занятость порта?


3-39949
Pokotskiy
2002-05-14 21:17
2002.06.13
Помогите скопировать таблицу!