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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
3-1291201543
StriderMan
2010-12-01 14:05
2013.07.21
isc_shutinprog


2-1353827595
ДенисПФ
2012-11-25 11:13
2013.07.21
Packed Record to MemoryStream


15-1362170517
Дмитрий С
2013-03-02 00:41
2013.07.21
Где взять оригинальный образ Windows 7?


15-1361990175
ХХХХХ
2013-02-27 22:36
2013.07.21
Как сделать паузу?


15-1362228850
xayam
2013-03-02 16:54
2013.07.21
Поделитесь опытом