Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Типизированный файл не хочет писаться:)

Автор: HelpAusHeaven 3.05.2004 21:45

Короче у меня описан двухмерный массив:

Код
matr        : array[0..MaxX,0..MaxY] of byte;


Далее, у меня описана структура:
Код
type TMyRec = record
 Matr : array[0..MaxX,0..MaxY] of byte;
end;
TMyRecFile = file of TMyRec;


Далее, я пробую скинуть этот массив в типизированный файл:
Код
var
 F     : TMyRecFile;
 MyRec : TMyRec;
begin
 AssignFile(F, 'template1.txt');
 ReWrite(F);
 MyRec.Matr := matr;
 Write(F, MyRec);
 CloseFile(F);
end;

И получаю ошибку несовместимые типы данных...
Почему? Все же совместимо... Как же мне тогда скинуть массив в файл??

Автор: APAL 3.05.2004 21:56

Может дело в том, что имя файла задано из 9 символов, хотя ограничение под ДОС 8 + 3 (расширение)?

Автор: BlackShadow 4.05.2004 3:33

Нет, Apal, дело не в этом. Я так понял, что ошибка возникает не во время выполнения, а во время компиляции. А дело в том, что с точки зрения Pascal'я, раз уж matr у тебя массив, а MyRec.Matr другой массив, то совместимости тут не добиться. А вдруг они разные по размерам? smile.gif
Подходящее решение выглядит где-то так:

Код

Type
 TArray=Array[0..MaxX,0..MaxY] Of Byte;
 TMyRec=Record
   Matr:TArray
 End;

Var
 matr:TArray;
 MyRec:TMyRec;
 f:File Of MyRec;

Begin
 {...}
 Assign(f,'Faylo.dat');
 ReWrite(f);
 MyRec.Matr:=Matr;
 Write(f,Matr);
 Close(f)
End.

Вот так вот в жизни бывает. А можно и move'ом воспользоваться, возможно и по-быстрее выйдет. По крайней мере, если массивы выделяются динамически, то они обычно выравниваются по границе страницы... Но это уже из другой оперыsmile.gif