Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
3-1100069354
first_may
2004-11-10 09:49
2004.12.12
Ошибка...


3-1100237129
Margel
2004-11-12 08:25
2004.12.12
Как заставить DBMemo отдавать в буфер обмена кирилицу?


8-1093890137
Ландграф Павел
2004-08-30 22:22
2004.12.12
чтение формата RealAudio


3-1100246020
Jann
2004-11-12 10:53
2004.12.12
даление строчки


14-1101231153
Kurtevich
2004-11-23 20:32
2004.12.12
Жалобы на Дельфи :(





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