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

Вниз

Сохранение массива в файл   Найти похожие ветки 

 
SteelMan   (2004-11-05 19:38) [0]

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);

Помогите решить возникшую проблему!


 
begin...end ©   (2004-11-05 19:40) [1]


> SteelMan   (05.11.04 19:38)


> var F: file of T1; {ВОТ ЗДЕСЬ ВЫДАЕТ ОШИБКУ!}    

В приведённом коде не видно описания типа T1.


 
Anton_K ©   (2004-11-05 19:43) [2]

Там динамические массивы есть.


 
SteelMan   (2004-11-05 19:44) [3]

спешил, вот и ошибка :))
var F: file of TA1; {ВОТ ЗДЕСЬ ВЫДАЕТ ОШИБКУ!}  
Смысл не в этом, ошибка:
"Type TA1 needs finalization - not allowed in file type"


 
Anton_K ©   (2004-11-05 19:45) [4]

>[3] Там динамические массивы есть!


 
SteelMan   (2004-11-05 19:46) [5]

Как я понял, запись(record) не может быть переменной длины... так все таки как сделать сохранение в файл...


 
SteelMan   (2004-11-05 19:47) [6]


> >[3] Там динамические массивы есть!

Да я заметил :)) что там динамические массивы!!!!!


 
Anatoly Podgoretsky ©   (2004-11-05 19:48) [7]

Не используй типизированые файлы.


 
PVOzerski ©   (2004-11-05 19:48) [8]

Объясню, в чем дело. Если мы пишем array of AnyType, компилятор эту переменную интерпретирует как указатель на особую структуру. Вам файл указателей сильно нужен? Вот Borland и позаботился, чтобы случайно такое не создать. Тем более, что для этой "особой структуры" используются и особые механизмы управления памятью.


 
begin...end ©   (2004-11-05 19:49) [9]

Или не используй динамические массивы :-)


 
SteelMan   (2004-11-05 19:56) [10]


> PVOzerski

Спасибо за совет!

> Или не используй динамические массивы :-)

В моей проге так нельзя... Там уже дофига всего написано, осталось сохранение/загрузка в/из файл/файла. Все менять мне влом! Да и тем более заранее не известно, сколько будет элементов в массиве!


 
uny   (2004-11-05 19:58) [11]

можно записать динамический массив в файл как нибудь иначе чем записывая каждый элемент в цикле?


 
PVOzerski ©   (2004-11-05 19:59) [12]

Придется тогда все-таки переходить на нетипизированные файлы или на потоки. И писать/читать не запись целиком, а по полям. И с полкм-динамическим массивом разговор будет особый: сначала длина, потом - содержимое, притом по адресу 0-го элемента, а не по адресу переменной как таковой.


 
SteelMan   (2004-11-05 20:02) [13]


> PVOzerski ©   (05.11.04 19:59) [12]

Хм... А кто-нибудь код представит? :))


 
PVOzerski ©   (2004-11-05 20:15) [14]

Вот подсказка:
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:20) [15]


> PVOzerski ©   (05.11.04 20:15) [14]

Спасибо! буду пытаться дальше.. :))



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1099788577
Роман
2004-11-07 03:49
2004.11.21
Автозагрузка файла


1-1099712363
beavka
2004-11-06 06:39
2004.11.21
Трей - проблема


1-1099464207
Дима
2004-11-03 09:43
2004.11.21
Excel сохранение


1-1100122006
SkyNet
2004-11-11 00:26
2004.11.21
Чужая программа и её самовосстанавливающаяся переменная


3-1098524563
ceval
2004-10-23 13:42
2004.11.21
Впервые использую DBE пара может быть глупых вопросов