Форум: "Начинающим";
Текущий архив: 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 ?
← →
p © (2012-11-25 11:33) [4]MemoryStream.Write(rec, SizeOf(aData));
← →
p © (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.026 c