Файловые типы данных введены в язык для работы с внешними устройствами — файлами на диске, портами, принтерами и т. д. Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратный процесс — записью, или выводом.
Файловые типы языка Паскаль бывают стандартные и определяемые программистом. Стандартными являются текстовый файл(text) и бестиповой файл(file). Они описываются в программе, например, так:
var ft : text;
fb : file;
Программист может определить файл, состоящий из элементов определенного типа. Такой файл называется компонентным, или типизированным:
var fc : file of <тип_компонент>;
Компоненты могут быть любого типа, кроме файлового. Любой файл, в отличие от массива и записи, может содержать неограниченное количество элементов.
Текстовые файлыпредназначены для хранения информации в виде строк символов. При выводе в текстовый файл данные преобразуются из внутренней формы представления в символьную, понятную человеку, при вводе выполняется обратное преобразование.
Бестиповые и компонентныефайлы хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть при обмене с файлом происходит побитовое копирование информации.
Доступк файлам может быть последовательным, когда очередной элемент можно прочитать (записать) только после аналогичной операции с предыдущим элементом, и прямым, при котором выполняется чтение (запись) произвольного элемента по заданному адресу. Текстовые файлы позволяют выполнять только последовательный доступ, в бестиповых и компонентных можно использовать оба метода.
Прямой доступ возможен благодаря тому, что данные в этих файлах условно разделены на блоки одинакового размера, и перед операцией обмена выполняется установка текущей позиции файла на заданный блок. Прямой доступ в сочетании с отсутствием преобразований обеспечивает высокую скорость получения информации.
Чтобы не путать файлы в программе и файлы на диске, переменные файлового типа называют логическими файлами, а реальные устройства и файлы на диске — физическими файлами. Их имена задаются с помощью строк символов, например:
- 'primer.pas' — имя файла в текущем каталоге;
- 'd:\pascal\input.txt' — полное имя файла;
- 'CON' 'NUL' 'COM1' 'PRN' — имена устройств.
Для организации ввода-вывода необходимо выполнить следующие действия.
- Объявить файловую переменную.
- Связать ее с физическим файлом.
- Открыть файл для чтения и/или записи.
- Выполнить операции ввода-вывода.
- Закрыть файл.
Все стандартные процедуры и функции Паскаля, обеспечивающие ввод-вывод данных, работают только с логическими файлами. Ввод-вывод выполняется через буфер— специальную область оперативной памяти. Буфер выделяется для каждого открытого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь буфер не заполнится. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем данных считывается не столько, сколько запрашивается, а сколько поместится в буфер.
Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.
В Паскале есть подпрограммы, применяемые для работы со всеми типами файлов: assign, close, erase, rename, reset, rewrite, eof и IOresult.