![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с заполнением структуры... [D6, Win2k]
МИФИст © (2002-06-04 22:44:00)Всем привет.
Такой вопрос у меня есть некоторая структура, например:
PA = ^TA;
TA = record
HS: Dword;
PS: Dword;
DS: Dword;
MS: String;
MD: String;
end;
Во время работы она у меня заполняется, и сохраняется как PChar:
procedure Work(Data : Pointer);
begin
...
Save(Data);
end;
procedure Save(Data : Pchar);
Ch: Char;
begin
for i:=0 to Len-1 do
write(TempFile,Data[i]);
Ch:=#13;
write(TempFile,Ch);
Ch:=#10;
write(TempFile,Ch);
end;
Сохраняется всё правильно данные сохранются как надо с разделителем #13#10. А вот прочитать у меня не получается,
так чтобы я мог и поочередно посылать в процедуру Work. Т.е. всё дело работает в одну сторону.
Вопрос вот в чём как читая TempFile: File of Char заполнить структуру по-байтно, что-то вроде:
var TT: PA;
Dat: Char;
TempFile: File of Char;
...
for i:=0 to Len-1 do
begin
read(TempFile, Dat[i]);
TT[i]:=Dat[i]; ???????????
end;
чтобы потом сделать
Work(TT) ?
Я надеюсь кто-нибудь понял мой вопрос =)
handra (2002-06-05 12:19:00) [1]МИФИст ©> то все будет работать...
МИФИст (2002-06-05 11:44:00) [2]А если переопределить MS и MD как String[6]?
Burmistroff (2002-06-05 00:36:00) [3]Вввиду того, что в структуре есть стринги неопределенной длинны сделать это будет не совсем просто. Я бы сохранял длину стринга в дополнительные ячейки массива (dlina1,dlina2:dword)и при записи массива в файл, дописывал стринги в его конец.
При загрузке файла во временную стрингу tmp, можгно будет копировать поля MS и MD напрямую (учитывая смещение по длине массива) из стринги copy(tmp, 4*3+4*2+1, i), где 4*3 - длина имеющихся полей массива, 4*2 - длина доп.полей (dlina1 dlina2) содержащих длины стрингов MS и MD, а i - длина стринга:
procedure Load(Data : Pchar);
...
CopyMemory(data, pchar(tmp), 4*5); //загружаем числа в массив
pa(data).MS:=copy(tmp, 4*5+1, pa(data).dlina1);
pa(data).MD:=copy(tmp, 4*5+1+ pa(data).dlina1, pa(data).dlina2);