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

Вниз

Помогите!!!   Найти похожие ветки 

 
kronos ©   (2002-03-11 02:30) [0]

Помогите чайнику!!! Я недавно перешел с Pascal 7.0 на Delphi 6. В Pascal-евской программе я создал file of n (type n=record a:string[4]; b:longint end;). При чтении этого файла Delphi-йской прогой получается ерунда какая-то. Подскажите, как мне переконвертировать этот файл, чтобы он нормально заработал в Delphi-йской проге.


 
Adder ©   (2002-03-11 06:13) [1]

Прочитаем из Вашего файла пару записей :)
program Project1;
{$APPTYPE CONSOLE}
uses windows;
type
n= packed record // !!! и не надо "переконвертировать" :)
a:string[4];
b:longint;
end;
var
F:File Of n;
nn:n;
begin
AssignFile(F,"YourFile.xxx");
Reset(F);
Read(F,nn);
Writeln(nn.a," ",nn.b);
Read(F,nn);
Writeln(nn.a," ",nn.b);
CloseFile(F);
end.


 
tovSuhov ©   (2002-03-11 07:40) [2]

> Adder
Простите, что вмешиваюсь... Не разъясните ли мне, чем отличаются объявления "packed record" и "record" (просто про packed record первый раз услышал)


 
Anatoly Podgoretsky ©   (2002-03-11 07:44) [3]

В первом случае записиь "пакуется" так, что бы она занисала ровно столько байт, скольно нужно, а во втором случае столько байт, сколько компилятор посчитает нужным для оптимальной работы.

Слово packed существует еще с самых первых версий Паскаля.


 
panov ©   (2002-03-11 07:48) [4]

>tovSuhov © (11.03.02 07:40)
По умолчанию, значения в структурных типах выравниваются по границе слова или двойного слова для ускорения доступа к этим значениям.
При объявлении с использованием ключевого слова packed значения не выравниваются, что позволяет "упаковать" структуру.
Но при этом снижается скорость работы с данными структуры.


 
Adder ©   (2002-03-11 07:59) [5]

Отсутствием выравнивания :)
packed record из предыдущего примера займет ровно 9 байт (a=5 байт и b=4 байта)...
А record будет занимать 12 байт (выравнивание на границу двойного слова => "а" займет 8 байт вместо 5).
Насколько я помню, в BP7 record и array по умолчанию "packed" (могу ошибаться).

Есть еще вариант - в опциях компилятора снять флажок
Aligned record files

By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage.
For example,
type TNumbers = packed array[1..100] of Real;

Using packed slows data access and, in the case of a character array, affects type compatibility.



 
kronos ©   (2002-03-11 23:04) [6]

Люди, вы мне жизнь спасли!!! Огромное СПАСИБО :)))



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
1-80611
Seven
2002-03-11 15:49
2002.03.25
Как программно выделить строку в TStringGrid ?


1-80491
dimmu
2002-03-06 10:06
2002.03.25
Работа с классами в Delphi


1-80523
SergeyVP
2002-03-12 05:28
2002.03.25
Компонент и TApplication


1-80603
Злой
2002-03-11 13:38
2002.03.25
как вывести на печать сразу всю таблицу


1-80572
Andrey Peryazev
2002-03-10 09:28
2002.03.25
как перевести текст с английской раскладки на русскую или наоборот?