Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];

Вниз

Packed Record to MemoryStream   Найти похожие ветки 

 
ДенисПФ   (2012-11-25 11:13) [0]

type
aData = Packed Record
   aStr:   Array Of String;
   aInt:   Array Of Integer;
 End;


procedure TForm1.Button1Click(Sender: TObject);
var
 rec:  aData;
 Ms1:TMemoryStream32;
begin
SetLength( rec.aStr, 2 );
SetLength( rec.aInt, 2 );
rec.aStr[0]:="stroka1";
rec.aStr[1]:="stroka2";
rec.aInt[0]:=2222222;
rec.aInt[1]:=333333;

Ms1:= TMemoryStream32.Create;
end;


КАК rec  ЗАПИСАТЬ В Ms1 ?


 
antonn ©   (2012-11-25 11:16) [1]

если возможно, то указать конкретную (максимальную) длину string

> aData = Packed Record
>    aStr:   Array Of String[8];
>    aInt:   Array Of Integer;
>  End;


но, возможно, ошибаюсь


 
ДенисПФ   (2012-11-25 11:21) [2]

Да, размер строки нужно было указать, извиняюсь.
Но как потом rec  ЗАПИСАТЬ В Ms1 ?


 
ДенисПФ   (2012-11-25 11:21) [3]

Да, размер строки нужно было указать, извиняюсь.
Но как потом rec  ЗАПИСАТЬ В Ms1 ?


 
©   (2012-11-25 11:33) [4]

MemoryStream.Write(rec, SizeOf(aData));


 
©   (2012-11-25 11:35) [5]


> p ©   (25.11.12 11:33) [4]
> MemoryStream.Write(rec, SizeOf(aData));


Плохо вкурил

CopyMemory


 
ДенисПФ   (2012-11-25 11:39) [6]

MemoryStream.Write(rec, SizeOf(aData));
такое не прокатит в данном случае.


 
ДенисПФ   (2012-11-25 11:52) [7]

а с помощью  CopyMemory
как в Ms1 ?


 
MBo ©   (2012-11-25 12:46) [8]

Для каждой записи нужно писать в поток:

длину первого массива
для каждой его строчки:
  длину строки
  тело строки -начиная с AStr[i][0], размер Length * SizeOf(Char)
длину второго массива
его тело  - начиная с AInt[0]


 
MBo ©   (2012-11-25 12:47) [9]

Поправка:
тело строки -начиная с AStr[i][1], размер Length * SizeOf(Char)


 
DVM ©   (2012-11-25 15:09) [10]


> type
> aData = Packed Record
>    aStr:   Array Of String;
>    aInt:   Array Of Integer;
>  End;

чтобы эту структуру сохранить в поток, требуется как минимум сохранять сначала количество элементов в каждом массиве, потом длину каждого элемента (для строки), потом символы строки. Иначе обратно не десериализуешь.


 
QAZ9   (2012-11-25 16:32) [11]

Packed тут также вообще невтему


 
Медвежонок Пятачок ©   (2012-11-25 18:49) [12]

здесь и рекорд не в тему


 
Slym ©   (2012-11-27 10:49) [13]

type
 TData = Packed Record
   aStr:String[255];
   aInt:Integer;
 end;
 PDataArray=^TDataArray;
 TDataArray=array[0..1023] of TData;
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
rec:  TData;
Ms1:TMemoryStream;
begin
 //запись
 Ms1:= TMemoryStream.Create;
 for i:=0 to 10 do
 begin
   rec.aStr:="stroka" + IntToStr(i);
   rec.aInt:=i;
   Ms1.WriteBuffer(rec,SizeOf(rec));
 end;
 //чтение
 Ms1.Position:=0;
 while Ms1.Read(rec,SizeOf(rec))=SizeOf(rec) do
 begin
   Application.MessageBox(PChar(string(rec.aStr)),PChar(IntToStr(rec.aInt)),0)
 end;
 Ms1.Free;
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.002 c
15-1362084293
Германн
2013-03-01 00:44
2013.07.21
D-Link DSL-2570


4-1264756803
Handbrake
2010-01-29 12:20
2013.07.21
Вопрос по memory mapped files


2-1353504016
Tcount
2012-11-21 17:20
2013.07.21
Пишу свое интернет-радио...


15-1360285956
Кто б сомневался
2013-02-08 05:12
2013.07.21
Медленная отрисовка 2D GDI Windows 7 (в 4.5 раза медленнее XP)


15-1361888673
xayam
2013-02-26 18:24
2013.07.21
Покер онлайн





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