Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
14-40151
and_sp
2002-05-08 10:56
2002.06.13
Install Shield для Delphi 3


1-40032
777
2002-06-01 13:13
2002.06.13
DrawGrid


1-40094
PTE
2002-06-03 08:52
2002.06.13
Как получить и подставить системную дату и время


3-39939
Помогите
2002-05-21 10:48
2002.06.13
?


3-39970
BoBka
2002-05-22 06:44
2002.06.13
DBGrid1.Options???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский