Главная страница
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
14-3071
Sizam
2003-04-07 23:53
2003.06.02
Игра Uplink (где скачать)


14-3053
Плохой человек
2003-05-14 23:06
2003.06.02
Звук на CD-ROM


14-3162
Dmitriy O.
2003-05-15 13:01
2003.06.02
Куда податься молодым программистам (в Иннете).


1-2856
sapsi
2003-05-22 10:32
2003.06.02
Команда для активизации окна


14-3152
Думкин
2003-05-15 07:06
2003.06.02
Кругозор