Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизЗаписи Найти похожие ветки
← →
Holy (2003-05-22 13:54) [0]Следующий вопрос. Есть запись (record) из нескольких полей типа строка различной длины. Можно ли это одним махом скопировать в строку или обречен на поле1+поле2 и т.д.
← →
Palladin (2003-05-22 13:59) [1]обречен
← →
Palladin (2003-05-22 14:00) [2]хотя если record packed, то нет...
← →
Holy (2003-05-22 14:04) [3]Объясните подробней...
← →
Palladin (2003-05-22 14:14) [4]я тебя обманул, в любом случае необходимо складывать..
← →
NDeu (2003-05-22 14:40) [5]Хоть и извращатся можно:
type
TMyRecord=record
Case Boolean of
True:(Str1:array[0..9]of Char;
Str2:array[0..19]of Char);
False:(LongStr:array[0..29]of char);
end;
procedure TForm1.Button1Click(Sender: TObject);
var MyRecord:TMyRecord;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
ShowMessage(MyRecord.LongStr);
end;
← →
panov (2003-05-22 15:09) [6]>NDeu © (22.05.03 14:40)
Для такой записи нет необходимости извращаться:
TMyRecord=record
Str1:array[0..9]of Char;
Str2:array[0..19]of Char;
end;
ShowMessage(IntToStr(SizeOf(TMyRecord)));
← →
Palladin (2003-05-22 15:14) [7]
> panov © (22.05.03 15:09)
немножко не так
ShowMessage(pchar(@MyRecord));
← →
Sandman25 (2003-05-22 15:45) [8]2Palladin
Мне кажется, нет гарантии, что на конце записи будет #0. Во всяком случае, для локальной (объявленной в процедуре/функции) записи.
← →
Palladin (2003-05-22 15:56) [9]да нет, особенно при некоторых обстоятельствах, по этому можно насильно его организовать
type
TMyRecord=packed record
Str1:array[0..9]of Char;
Str2:array[0..19]of Char;
EOZS:byte;
end;
procedure TForm1.Button1Click(Sender: TObject);
var MyRecord:TMyRecord;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
MyRecord.EOZS:=0;
ShowMessage(pchar(@MyRecord));
end;
← →
panov (2003-05-22 16:35) [10]>Palladin © (22.05.03 15:56)
Для packed record и массивов символов нет необходимости вводить дополнительно еще вводить поле.
SizeOf даст точный размер записи.
← →
Palladin (2003-05-22 16:40) [11]а зачем автору точный размер записи?
← →
panov (2003-05-22 17:55) [12]MyRecord,MyCopyRecord:TMyRecord;
p:PChar;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
GetMem(p,SizeOf(MyRecord));
move(MyRecord,p^,SizeOf(MyRecord));
...
move(p^,MyCopyRecord,SizeOf(MyCopyRecord));
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c