Форум: "Основная";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
ВнизКак в динамике задавать размеры поля 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c