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

Вниз

Как в динамике задавать размеры поля Field1 записи TRecord?   Найти похожие ветки 

 
Andrew   (2003-08-15 11:49) [0]

Как в implementation в динамике задавать размеры поля Field1 записи TRecord, вместо const?

например, в таком коде:

const MaxSizeKeyedField = 255; // эту строку необходимо заменить на переменную, с которой можно было бы работать в implementation.

type
TRecord = record
Field1: string[MaxSizeKeyedField];
Field2: LongInt;
end;

TКакой-нибудь класс = class(TObject)
private
{ Private declarations }
F: file of THelmRec;
public
{ Public declarations }
............................
end;


 
Skier ©   (2003-08-15 11:51) [1]

Field1: string; + SetLength(...) ?


 
Andrew   (2003-08-15 11:59) [2]

Я имею в виду возможность изменять MaxSizeKeyedField произвольно по ходу выполнения программы.
Может ли кто-то показать как это сделать в виде небольшого примера?


 
Семен Сорокин ©   (2003-08-15 12:13) [3]

type
TRecord = record
Field1: array of char;
Field2: LongInt;
end;

var
_rec: TRecord;

SetLength(_rec.Field1, MaxSizeKeyedField);


 
Andrew   (2003-08-15 12:43) [4]

Семен Сорокин!
Спасибо за практический совет!
Попробовал применить Ваш пример, код ниже.
Но получаю при компилировании следующую ошибку:
" Type "TRecord" needs finalization - not allowed in file type"
Подскажите, что так прописал?

type
TRecord = record
Field1: array of Char;
Field2: LongInt;
end;

TКакой-нибудь класс = class(TObject)
private
{ Private declarations }
F: file of TRecord;
tr: TRecord;
FMaxSizeKeyedField: LongInt;
public
{ Public declarations }
constructor Create(const FileName, HelmFName: string);
end;

implementation

constructor TPioneerDb.Create(const FileName: string);
begin
inherited Create;

AssignFile(F, FileName);
if FileExists(FileName) then begin
FMaxSizeKeyedField:= 255;
SetLength(tr.Field1, FMaxSizeKeyedField);
Reset(F);
end else
Rewrite(F);
end;


 
Reindeer Moss Eater ©   (2003-08-15 12:45) [5]

type
TRecord = record
Field1: string;//[MaxSizeKeyedField];
Field2: LongInt;
end;


 
Семен Сорокин ©   (2003-08-15 12:50) [6]

F: file of TRecord; для динамических рекордов не катит.
открывай как обычный файл и считывай данные в динамический буфер.


 
Andrew   (2003-08-15 12:56) [7]

А как в последствии в поле Field1: array of Char; практически вводить информацию, например текстовую или численную?

Я допустил некоторую неточность в объявлении constructor Create(const FileName, HelmFName: string); - следует читать как constructor Create(const FileName: string);


 
app ©   (2003-08-15 13:03) [8]

Записи могут быть только фиксированной длины, а типизированные файлы таботают только с типами, и не могут сожержать в себе объекты переменной длины, к тому же находщиеся за пределами этой записи.


 
Andrew   (2003-08-15 13:06) [9]

Семен Сорокин.
Можно ли по последним вопросам небольшой практичекий пример привести (о считывании данных в динамический буфер и вводить/считывать из поля Field1: array of Char информацию, например текстовую или численную?
Всем спасибо за поддержку!


 
Skier ©   (2003-08-15 13:13) [10]

>Andrew (15.08.03 13:06) [9]
С твоей записью прекрасно справится TStringList.
Не думал об этом ? :)


 
Serginio666   (2003-08-15 13:18) [11]

Тебе придется применять несколько другой подход нежели типизированные файлы. Посмотри
http://www.1c.hippo.ru/cgi-bin/predownl.cgi?id=2019

Там есть простое иерархическое хранилище.



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
4-92318
Acidy
2003-06-26 15:34
2003.08.28
Виндовые иконки ...


3-91989
Admin
2003-08-05 07:11
2003.08.28
Программа с MySQL.


4-92298
memphis
2003-06-25 17:23
2003.08.28
About System Tray...


14-92206
Глазунья и Болтунья.
2003-08-10 11:05
2003.08.28
Кто умеет, окромя омлета яичницы, готовить?


7-92291
Ronin
2003-06-14 01:17
2003.08.28
CDROM открыт???