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

Вниз

Записи   Найти похожие ветки 

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

Наверх




Память: 0.49 MB
Время: 0.017 c
3-2798
Avreliy
2003-05-14 19:12
2003.06.02
Причина Non-blob column in table required to perform operation!


8-3018
Stam
2003-02-17 12:01
2003.06.02
Как перекодировать Audio CD в MP3?


14-3112
kalishenko
2003-05-07 19:14
2003.06.02
FastReport


7-3194
QUE
2003-04-01 11:08
2003.06.02
Rasapi


1-2938
werr
2003-05-20 17:10
2003.06.02
как определить каталог, откуда запускалась программа?