Ввод данных в ЭВМ производится с внешних устройств (например, c магнитной ленты, магнитного диска, с клавиатуры). Вывод данных также производится на внешние устройства (экран дисплея, принтер, магнитная лента или диск).
Группа данных на внешнем устройстве, объединенная одним именем, называется файлом (Files - картотека, скоросшиватель). Файл состоит из отдельных компонентов. Все компоненты должны быть одного типа. Однако в отличие от массива и множества количество компонентов в файле заранее не ограничивается. В частном случае файл может быть пустым, т.е. не содержать ни одного компонента.
В Турбо Паскале принято более широкое определение файла по сравнению с приведенным выше. Здесь под файлом понимают именованную область внешней памяти или логическое устройство, являющееся потенциальным источником или приемником информации. Такими устройствами могут быть, например, клавиатура или принтер.
По методу доступа к компонентам файлы разделяются на последовательные и прямые. В последовательном файле чтение и запись компонентов могут быть только последовательными, начиная с первого компонента. Таким является, например, файл на магнитной ленте. В прямом файле можно прочесть или записать любой компонент, указав его номер в файле. При этом перебор предыдущих компонентов не требуется. В частности, на магнитном диске можно организовать как последовательный, так и прямой файлы.
По направлению передачи данных файлы разделяются на входные (ввод из внешнего устройства в оперативную память) и выходные (вывод из оперативной памяти на внешнее устройство).
Существуют три типа файлов:
1) типизированные, компоненты которых имеют жесткую структуру;
2) текстовые, состоящие из строк переменной длины;
3) нетипизированные, рассматриваемые как последовательность байтов.
Нетипизированные файлы здесь не будут обсуждаться. Они применяются для прямого доступа к любому файлу на диске независимо от его внутреннего формата и обеспечивают быстрый ввод или вывод информации; для этих файлов определены свои процедуры ввода-вывода (BlockRead и BlockWrite).
Описание файлового типа или файловой переменной имеет следующий вид:
1) file of <тип> (любое имя типа, кроме типа файла);
2) text;
3) file.
Ограничение на имя типа, указанное в первом описании, означает, что в Турбо Паскале не может быть создан файл, компонентами которого являются файлы.
Пример 1.
Type FileInt = file of integer;
Date = record
Day : 1..31;
Month : 1..12;
Year : 1900 .. 2000
end;
Stud = record
Fam : string[20];
BirthDay : Date;
Naс : string[15];
Sex : char
end;
FileStud = file of Stud;
Var F1 : FileInt;
F2 : file of real;
F3 : FileStud;
F4 : text;
F5 : file;
Здесь F1, F2, F3 - типизированные файлы, но для описания F1 и F3 использовано имя типа (FileInt, FileStud), а для F2 - непосредственно описание типа (file of real). Длина компонента файла F1 составляет 2 байта, файла F2 - 6 байтов, файла F3 - 42 байта.
Переменная файлового типа не может входить в состав выражения, для нее недопустимы операции сравнения, она не может стоять в левой части оператора присваивания.
Имя файла может быть параметром процедуры или функции. В этом случае имя файла должно быть параметром-переменной, т.е. в списке формальных параметров перед ним должно стоять слово Var.Следовательно, при обращении к процедуре передается адрес файловой переменной, равный 4 байта, а не значение этой переменной.
При старте блока, в котором описаны файловые переменные, для них, как и для других переменных, выделяется поле памяти определенного размера: для текстового файла 256 байт, для типизированного и нетипизированного – 128 байт.