— компонентные файлы (типа File Of ... );
— бестиповые файлы (типа File).
Каждому типу будет посвящен отдельный раздел, а пока ограничимся их краткими характеристиками.
Текстовые файлы — это файлы, состоящие из кодов ASCII, включая расширенные и управляющие коды. Текстовые файлы организуются по строкам и обязательно содержат специальный код, называемый концом файла. Любую информацию (числовую, символьную или строчную) текстовый файл хранит в виде символов, ее изображающих. Например, текст программы на Паскале — это текстовый файл. Его можно вывести на экран командой MS-DOS TYPE или на печать командой PRINT и прочитать. Но выполняемый ЕХЕ-файл, полученный после компиляции, уже не будет текстовым. И, если удается увидеть или распечатать его содержимое, то прочитать, например, как эту страницу точно не удается. Пример текстового файла — бегущие строки на экране дисплея, когда он работает в текстовом режиме. При наборе букв и цифр на клавиатуре, создается текстовый файл.
Компонентные файлы в отличие от текстовых состоят из машинных представлений чисел, символов и структур, из них построенных. Они хранят данные в том же виде, что и память ПЭВМ. Поэтому посредством компонентных файлов можно осуществлять обмен данными только между дисками и рабочей памятью программы, но нельзя, например, напрямую вывести данные на экран.
Бестиповые файлы также состоят из машинных представлений данных. Отличие их от компонентных файлов в том, что последние имеют дело только с данными заранее объявленного типа, а бестиповые — с произвольными наборами байтов независимо от их структуры и природы. Описание языка определяет бестиповый файл как низкоуровневый канал ввода-вывода для доступа к любым файлам с любым типом.
Для всех типов файлов минимальной единицей хранения информации в них является байт. Принципы работы с файлами едины, хотя и имеются различия в наборах команд для работы с разными файловыми типами. Для всех без исключения файлов необходимо предварительное связывание их логических обозначений (файловых переменных) с физическими файлами.
Файловые переменные, описанные в программе, не могут участвовать в операторах присваивания.
При использовании файловых переменных любого типа в качестве формальных параметров заголовков процедур и функций они всегда должны быть описаны как VAR-параметры.
- 225 -
12.5. Общие процедуры для работы с файлами
Турбо Паскаль вводит ряд стандартных процедур, применимых к файлам любых типов (табл. 12.2). Кроме этого, существует ряд их расширений и специальных процедур для работы с различными типами файлов. Такие процедуры будут рассматриваться в разделах, посвященных различным типам файлов. Описания процедур ввода и вывода данных Write, WriteLn, Read и ReadLn не включены в этот раздел, так как они достаточно сильно различаются при работе с разными типами файлов, а иногда (при работе с бестиповыми файлами) и вовсе теряют смысл.
В Турбо Паскале не определены процедуры ввода и вывода в файлы Get(f) и Put(f), и их функции выполняют другие процедуры ввода-вывода. Не определено также обращение к буферной переменной f^.
Таблица 12.2
Процедура или функция | Действие |
Assign(VAR f; FileName : String) | Связывает файловую переменную f с именем физического файла, заданным в строке FileName |
Reset(VAR f) | Открывает файл с логическим именем f для чтения |
Rewrite(VAR f) | Открывает файл с логическим именем f для записи |
Close(VAR f) | Закрывает канал ввода-вывода файла с логическим именем f |
Rename(VAR f; NewName : String)) | Переименовывает физический файл, ранее связанный с файловой переменной f, в имя NewName. Должна вызываться до открытия файла (применима лишь к закрытым файлам) |
Erase(VAR f) | Стирает (если это возможно) физический файл, связанный с файловой переменной f с носителя информации. Стираемый файл должен быть закрытым |
- 226 -
EOF(VAR f) : Boolean | Возвращает значение True, если достигнут конец файла f, т.е. из него ничего уже нельзя прочитать или файл пуст. Иначе возвращает False |
Файловая переменная f может иметь любой файловый тип.
12.5.1. Связывание файлов