![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
record [D5, Win95/98]
3d[Power] © (2002-01-02 23:42:00)Если указывать
type ddemodata = record
x,y : word;
var1 : byte;
var2 : shortstring;
end;
А потом:
demodata: ddemodata;
demofile : file of ddemodata;
Можно будет потом вызывать:
read(demofile,demodata);
Из файла значения будут занесены в demodata.
Вопрос в следующем: где в delphi/sources валяется исходник этого действия, а конкретно, что бы hex заносить в переменные типа record.
DK (2002-01-06 06:02:00) [1]Объясняю ещё раз:
type myrec = packed record-размер созданного файла 5 байт (x + y + var1 + var2)
x,y : byte;
var1 : word;
var2 : byte;
end;
var
f: file of myrec;
w: myrec;
begin
assignfile(F, "c:\111.1");
rewrite(F);
write(F,w);
system.close(F);
end;
без packedбудет 6 байт
С shortstringвсё работает (уже проверил), но размер файла будет побольше (>256). Лучше по-моему ограничить строки не shortstringа например string[size].
Второе: если это твой файл: $34$C3$FA$21$D3 (5 байт)
то с этим
type myrec = record
x,y : byte;
var1 : word;
var2 : byte;
end;
при считывании ты получишь Read beyond end of file
Поэтому или накинь один байтик или юзай packed record.
Он работает чуток медленнее, но тогда все твои байтики из файла чётко "спроэцируются" на запись:
X:= $34;
Y:= $C3;
var1:= $21FA;
var2:= $D3;
Alx2 (2002-01-04 14:15:00) [2]Вот с absolute:
type
TmyRec = packed record
byte1, byte2 : byte;
Data : Word;
end;
Var
A : integer;
B : TMyRec absolute A;
begin
A := 0; // Теперь весь B забит нулями
B.byte1 := 1;
B.byte2 := 2;
теперь A=513=$00000201
Mbo (2002-01-04 14:05:00) [3]если я правильно понял задачу
p:pbytearray;
amyrec:myrec;
p:=@amyrec;
p[0]:=$34;
...
или c помощью Absolute
3d[Power] (2002-01-04 13:59:00) [4]Ок, перестроим вопрос по другому:
у меня есть последовательность байт
$34$C3$FA$21$D3
не суть важно какая
как мне ее "спроецировать" чтоли в переменную типа record?
type myrec = record
x,y : byte;
var1 : word;
var2 : byte;
end;
"спроецировать" также как делает это процедура Read. Для файла of record.
False_Delirium (2002-01-04 05:52:00) [5]Не суть важно какой тип.
Копируется определённое количество бай начиная с адреса, где хранится структура, с внутренним смещением в размер типа переменных...
DK (2002-01-04 03:35:00) [6]На счёт shortstringне уверен, но если определён тип и имеет определённый размер, то можно и читать из файла и писать в файл, но если одна запись попадает на обрыв файла (пр. длина файла 100 байт а длина записи 30 байт - на цело не делится) то появятся глюки. Кроме того по моему удобнее использовать packed record.
Adder (2002-01-04 02:54:00) [7]моя твоя не понимай :(
3d[Power] (2002-01-03 23:54:00) [8]НУ может кто знает?