В Паскаль-программе файл является переменной. Следовательно, он должен иметь определенное имя, описанное в разделе Var(например, имя FileName). С другой стороны, операционная система MS DOS использует имена файлов вида 'Point.dat', 'D:\Verta\Map.txt' и т.п.
Отсюда можно сделать вывод, что один и тот же файл может иметь два разных имени: внутреннее имя, объявленное в разделе Var, и внешнее имя, с которым этот файл известен операционной системе. С тем, чтобы организовать доступ к конкретному файлу, в программе должна быть описана связь между внутренним и внешним именами файла. Без такого описания Паскаль-программе доступны лишь два текстовых файла со стандартными именами Input (файл ввода с клавиатуры) и Output (файл вывода на экран дисплея). Любые другие файлы, а также логические устройства становятся доступны программе только после выполнения процедуры установления связи между именем файла в программе и именем файла в операционной системе. Для этого используется процедура
Assign(файловая-переменная,строка),
где "строка" - текстовое выражение, содержащее внешнее имя файла или имя логического устройства. В частном случае строка может иметь вид пути доступа к файлу.
Внешнее имя файла, задаваемое в процедуре Assign, формируется по правилам, принятым в системе MS DOS. Если в строке не указано имя диска, то принимается текущий диск; если в строке не указано имя каталога, то принимается текущий каталог.
Возможна другая интерпретация работы, выполняемой процедурой Assign.
Пусть мы имеем следующий фрагмент программы:
Var FileName : text;
Begin
Assign(FileName,'Fn.dat');
Здесь в разделе Var указано, что имя FileName - это файловая переменная, но никакого конкретного значения переменной FileName не присвоено. Эту работу выполняет процедура Assign: файловой переменной FileName присваивается значение строки-константы 'Fn.dat', определяющей имя конкретного файла на диске.
Как уже ранее указывалось, при старте блока всем переменным, описанным в разделе Var, выделяются поля памяти в соответствии с описанием их типа. Заполнение поля памяти переменной производится в разделе операторов. По отношению к файловой переменной можно считать, что имя файла на диске - это константа файлового типа, а процедура Assign выполняет присваивание файловой переменной значения файловой константы (при этом происходит частичное заполнение поля памяти, выделенного для файловой переменной; полное заполнение этого поля производится при открытии файла).
Второй вариант приведенного выше фрагмента программы:
VarFileName : text;
S : string;
Begin
S:='Fn.dat'; Assign(FileName,S);
Здесь файловой переменной FileName присваивается значение строки-переменной S, которой предварительно было присвоено значение строки-константы 'Fn.dat'.