Главная страница
    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.003 c
4-1264756803
Handbrake
2010-01-29 12:20
2013.07.21
Вопрос по memory mapped files


15-1362121080
Jeer
2013-03-01 10:58
2013.07.21
Вдруг пригодится..


2-1353673766
AntonMos
2012-11-23 16:29
2013.07.21
daysbetween


3-1286827107
well
2010-10-11 23:58
2013.07.21
Как удалить(заменить) сообщение об удалении записи?


15-1362083407
Юрий
2013-03-01 00:30
2013.07.21
С днем рождения ! 1 марта 2013 пятница





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