Для работы с файлами в программе должны быть определены переменные файловых типов, которые считаются представителями файлов в Pascal-программе.
Переменные файлового типа определяются по следующему правилу: <Имя переменной> : file of <базовый тип>; где «базовый тип» – любой допустимый в Turbo Pascal тип, кроме файлового типа.
Каков состав и каково назначение установочных и завершающих операций с файлами? Какие параметры используются при обращении к соответствующим процедурам?
В эту группу входят четыре операции, реализованные в виде стандартных процедур со следующими именами: Assign, Reset, Rewrite, Flush, Close.
Процедура Assign предназначена для установления связи между конкретным физическим файлом на магнитном носителе и переменной файлового типа, которая будет являться представителем этого файла в программе.
Правило обращения к процедуре Assign:
Assign (F, S);
F – имя файловой переменной,
S – строковое выражение, образующее имя файла по правилам, принятым в операционной системе MS-DOS (может включать в себя обозначение дисковода, цепочку каталогов и имя файла).
Процедура Reset(F) предназначена для открытия файлов для чтения. При этом файловая переменная F должна быть уже связана с конкретным дисковым файлом с помощью процедуры Assign.
Под открытием в данном случае понимается поиск файла на внешнем носителе, образование специальных системных буферов для обменов с ним и установка текущего указателя файла на его начало (то есть на нулевой элемент).
Процедура Reset(F) предполагает, что открываемый дисковый файл уже существует, в противном случае возникает ошибка.
Процедура Rewrite(F) предназначена для открытия файлов для записи. При этом файловая переменная F должна быть уже связана с конкретным дисковым файлом с помощью процедуры Assign.
Процедура Rewrite допускает, что открываемый файл может еще не существовать; в этом случае она создает заданный файл. Если же файл существует, то Rewrite очищает его.
Процедура Flush(F) используется для завершения обменов с файлом без его закрытия. Обмены с файлами всегда реализуются через некоторый буфер в оперативной памяти, поэтому в процессе записи в файл последние записываемые элементы могут еще находиться («застрять») в буфере. Процедура Flush вызывает принудительный сброс этих элементов в файл.
Процедура Close(F) завершает действия с файлом. При этом ликвидируются внутренние буферы, образованные при открытии файла, оставшиеся в буфере данные сохраняются в файле.
При помощи каких процедур реализуются операции ввода-вывода (чтения из файла и записи в файл)? Каким образом происходит выполнение этих процедур?
Операции ввода-вывода (чтения из файла и записи в файл) реализуются с помощью процедур: Read, Write.
Правила записи операторов:
Read(F, A, B, C,...);
Write(F1, X, Y, Z, ...);
F, F1 – имена файловых переменных, к которым были применены операции открытия Reset и Rewrite соответственно,
A, B, C – переменные, типы которых совпадают с базовым типом файловой переменной F,
X, Y, Z – выражения, типы которых совпадают с базовым типом файловой переменной F1.
Выполнение процедуры Read: начиная с текущей позиции указателя файла будут последовательно читаться значения, содержащиеся в файле. Каждое прочитанное значение будет присваиваться очередной переменной из тех, которые указаны в вызове процедуры. После чтения очередного значения указатель файла будет смещаться на следующую позицию. Если в процессе выполнения процедуры Read текущий указатель файла будет установлен на позицию, не содержащую информации (то есть будет достигнут конец файла), то чтение будет прекращено, процедура Read завершится преждевременно, и возникнет ситуация ‘конец файла». Возникновение этой ситуации можно проверить с помощью встроенной функции EOF.
При выполнении процедуры Write значение очередного выражения будет помещено в файл в место, отмеченное текущим указателем. После этого текущий указатель будет передвинут на одну позицию и действия повторятся для следующего выражения из списка параметров вызова процедуры Write.