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

Вниз

сохраниение 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1100816074
Чайник
2004-11-19 01:14
2004.12.12
Форматы документов djv и djvu


6-1094570963
pkm
2004-09-07 19:29
2004.12.12
Сеть


8-1095352608
UserUserov
2004-09-16 20:36
2004.12.12
Графика на консоли в Delphi


14-1101131287
sniknik
2004-11-22 16:48
2004.12.12
жизнеописания умученных сиадминов ;о))


1-1101515434
Sirakuz
2004-11-27 03:30
2004.12.12
Delphi 8: TBytes ??