Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Внизсохраниение record or class to binary Найти похожие ветки
← →
Maxim____ (2004-11-15 01:45) [0]Приветствую!
Слышал краем уха, что можно сохранять структуры(а может быть и классы) как blob . Подскажите где копать,
Сразу вопрос, что происходит, если структура немного изменилась?
Тут конечно незаменим xml, но blob компактнее и непрозрачен, что и нужно.
← →
Maxim____ (2004-11-15 19:20) [1]люди добрые скажите что-нибудь по теме.
← →
Суслик © (2004-11-15 19:24) [2]
> Слышал краем уха, что можно сохранять структуры(а может
> быть и классы) как blob
в blob сохранять можно все что хочешь.
В общем случае просто так сохранить запись (относится также и к классу) в blob нельзя, т.к. она может содержать ссылочные типы, например длинные строки.
Нужно каждый элемент записи сохранять и читать в отдельности.
← →
Rem © (2004-11-15 19:27) [3]А в чем проблема?
record занимает участок памяти.
Эту память и сохраняйте.
>> если структура немного изменилась?
Где изменилась?
← →
Maxim____ (2004-11-16 01:06) [4]>А в чем проблема?
>record занимает участок памяти.
>Эту память и сохраняйте.
простите за неосведомлённость,
как это сделать?
или в каком разделе хелпа прочитать о том как это сделать?
← →
Amoeba © (2004-11-16 11:37) [5]
> Rem © (15.11.04 19:27) [3]
> А в чем проблема?
> record занимает участок памяти.
> Эту память и сохраняйте.
А если среди полей записи есть длинные строки или динамические массивы? Что тогда? См. Суслик © (15.11.04 19:24) [2]
← →
PVOzerski © (2004-11-16 12:13) [6]IMHO, можно подумать об использовании TStream.ReadComponent и TStream.WriteComponent. Естественно, объекты и свойства подойдут уже не любые.
← →
Maxim____ (2004-11-26 16:17) [7]структура у меня сложная с динамическими массивами и проч.
но сохранять её очень надо..
я не знаю как получить доступ к бинарному виду простой record
например состоящей из чисел и строк, без массивов?
второй вопрос.
как сделать перечисление элементов записи или класса.
возможно ли такое
if tclass().elements[0] is integer then... :)
или это бред?
жду ваших умных мыслей!
← →
Digitman © (2004-11-26 16:25) [8]
> Maxim____ (26.11.04 16:17) [7]
впору бросать нафих "батонобросание" и садиться за "умные" книги.
и раз и навсегда уяснить для себя, ЧТО на самом деле представляет из себя содержимое пеоременной того или иного типа.
без этого - никуда.
← →
Ken (2004-11-26 16:34) [9]
> структура у меня сложная с динамическими массивами и проч.
> но сохранять её очень надо..
Если очень надо сохранить - попробуй привести свою стуктуру к фиксрованному размеру, при етом фиксируй размер каждой переменной!
Всю ету структуру описывай в тип "запись" record и спокойно его сохраняй! Savetofile... LoadfromFile
Но учти, что тебе надо чтоб каждая переменная в типе записи имела фиксированный размер, т.е тебе придеться отказаться от перемен типа String (использую String[n], где n - его длина), от array of byte (придеться использовать array [0..n] of byte) и тд.
← →
cae © (2004-11-26 16:51) [10]Вот, для примера :
type
TMyClass = class
Field1 : Integer ;
Field2 : Double ;
Field3 : String ;
procedure WriteStream(Strm : TStream);
procedure ReadStream(Strm : TStream);
end ;
...................
procedure TMyClass.WriteStream(Strm : TStream);
var
Writer : TWriter ;
begin
Writer := TWriter.Create(Strm,4096);
try
with Writer do
begin
WriteInteger(Field1) ;
WriteFloat(Field2) ;
WriteString(Field3) ;
end ; //with Writer
finally
Writer.Free ;
end ;
end ;
procedure TMyClass.ReadStream(Strm : TStream);
var
Reader: TReader ;
begin
Reader := TReader.Create(Strm ,4096);
try
with Reader do
begin
Field1 := ReadInteger;
Field2 := ReadFloat ;
Field3 := ReadString ;
end ; // with Reader
finally
Reader.Free;
end ;
end ;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c