![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение массива в файл [D7, WinXP]
SteelMan © (2004-11-05 19:38:00)TA3 = record
A3Text: string[150];
YN: boolean;
end;
TA2 = record
A2Text: string[235];
TAData: array of TA3;
end;
TA1= record
TName: string[180];
TData: array of TA2;
end;
MasAr = array of TA1;
{***}
var F: file of T1; {ВОТ ЗДЕСЬ ВЫДАЕТ ОШИБКУ!}
AssignFile(f, 'A.aaa');
Rewrite(F);
for i:= 0 to length(MasAr)-1 do begin
write(F, MasAr[i]);
end;
closefile(F);
Помогите решить возникшую проблему!
SteelMan (2004-11-05 20:20:00) [1]
> PVOzerski © (05.11.04 20:15) [14]
Спасибо! буду пытаться дальше.. :))
PVOzerski (2004-11-05 20:15:00) [2]Вот подсказка:
x:=length(TData);
blockwrite(f,x,sizeof(x));
if x>0 then
blockwrite(f,TData[0],sizeof(TData[0])*x);
Дальше - сам.
SteelMan (2004-11-05 20:02:00) [3]
> PVOzerski © (05.11.04 19:59) [12]
Хм... А кто-нибудь код представит? :))
PVOzerski (2004-11-05 19:59:00) [4]Придется тогда все-таки переходить на нетипизированные файлы или на потоки. И писать/читать не запись целиком, а по полям. И с полкм-динамическим массивом разговор будет особый: сначала длина, потом - содержимое, притом по адресу 0-го элемента, а не по адресу переменной как таковой.
uny (2004-11-05 19:58:00) [5]можно записать динамический массив в файл как нибудь иначе чем записывая каждый элемент в цикле?
SteelMan (2004-11-05 19:56:00) [6]
> PVOzerski
Спасибо за совет!
> Или не используй динамические массивы :-)
В моей проге так нельзя... Там уже дофига всего написано, осталось сохранение/загрузка в/из файл/файла. Все менять мне влом! Да и тем более заранее не известно, сколько будет элементов в массиве!
begin...end (2004-11-05 19:49:00) [7]Или не используй динамические массивы :-)
Anatoly Podgoretsky (2004-11-05 19:48:00) [8]Не используй типизированые файлы.
PVOzerski (2004-11-05 19:48:00) [9]Объясню, в чем дело. Если мы пишем array of AnyType, компилятор эту переменную интерпретирует как указатель на особую структуру. Вам файл указателей сильно нужен? Вот Borland и позаботился, чтобы случайно такое не создать. Тем более, что для этой "особой структуры" используются и особые механизмы управления памятью.
SteelMan (2004-11-05 19:47:00) [10]
> >[3] Там динамические массивы есть!
Да я заметил :)) что там динамические массивы!!!!!
SteelMan (2004-11-05 19:46:00) [11]Как я понял, запись(record) не может быть переменной длины... так все таки как сделать сохранение в файл...
Anton_K (2004-11-05 19:45:00) [12]>[3] Там динамические массивы есть!
SteelMan (2004-11-05 19:44:00) [13]спешил, вот и ошибка :))
var F: file of TA1; {ВОТ ЗДЕСЬ ВЫДАЕТ ОШИБКУ!}
Смысл не в этом, ошибка:
"Type TA1 needs finalization - not allowed in file type"
Anton_K (2004-11-05 19:43:00) [14]Там динамические массивы есть.
begin...end (2004-11-05 19:40:00) [15]
> SteelMan (05.11.04 19:38)
> var F: file of T1; {ВОТ ЗДЕСЬ ВЫДАЕТ ОШИБКУ!}
В приведённом коде не видно описания типа T1.