Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-92212
clickmaker
2003-08-11 16:50
2003.08.28
Устоявшийся мужчина


6-92144
DocSS
2003-06-19 19:15
2003.08.28
Заполнение html-форм через TWebBrowser?


14-92169
tvic
2003-08-11 15:33
2003.08.28
Помогите новичку


4-92315
Navi
2003-06-28 14:56
2003.08.28
Маленькая и большая иконка для ехе


8-92119
BDRON
2003-05-03 17:43
2003.08.28
Оболчка для mp3 шек





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский