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

Вниз

Помогите с заполнением структуры...   Найти похожие ветки 

 
МИФИст ©   (2002-06-04 22:44) [0]

Всем привет.
Такой вопрос у меня есть некоторая структура, например:
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) ?

Я надеюсь кто-нибудь понял мой вопрос =)


 
Burmistroff   (2002-06-05 00:36) [1]

Вввиду того, что в структуре есть стринги неопределенной длинны сделать это будет не совсем просто. Я бы сохранял длину стринга в дополнительные ячейки массива (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);


 
МИФИст ©   (2002-06-05 11:44) [2]

А если переопределить MS и MD как String[6]?


 
handra ©   (2002-06-05 12:19) [3]

МИФИст ©> то все будет работать...



Страницы: 1 вся ветка

Текущий архив: 2002.08.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
14-60854
Эмиль
2002-07-23 13:43
2002.08.19
Какой аналог делфийского метода Inherited в C++Builder


1-60682
Edvin
2002-08-05 17:01
2002.08.19
Кириллица в Corel+Delphi


1-60691
Vovaka
2002-08-06 13:31
2002.08.19
Поддержка дополнительного языка


7-60866
Smok_er
2002-05-29 13:10
2002.08.19
Глюки, связанные с TListView и памятью


6-60780
Captain
2002-06-04 17:28
2002.08.19
Программа-шпион