2. Чем модуль отличается от процедуры? От программы?
3. Из каких разделов состоит модуль?
4. Какие стандартные модули языка Паскль Вы знаете?
Файлы в языке Паскаль обеспечивают возможность работы с внешними устройствами ЭВМ, предназначенными для ввода-вывода и хранения информации.
Файловый тип данных (файл) определяет упорядоченную совокупность произвольного числа однотипных компонент.
Понятие файла используется достаточно широко. Это может быть как обычный файл на диске, так и коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства.
При работе с файлами выполняются операции ввода-вывода. Операция ввода означает чтение данных с внешнего устройства (т.е. из входного файла) в основную память ЭВМ, а операция вывода – запись данных из основной памяти на внешнее устройство (т.е. в выходной файл).
Файлы на внешних устройствах часто называют физическими файлами. Их имена определяются операционной системой. В программах на языке Паскаль имена файлов задаются с помощью строк.
Пример: имя файла на диске может иметь вид:
‘a:\readme.txt’
‘c:\temp\abc.dat’
‘qwerty.doc’
Кроме того, в Паскаль могут использоваться имена устройств и портов, определенные в MS-DOS. Например: 'CON', 'LPT1', 'PRN', 'COM1', 'AUX', 'NUL'.
Для работы с файлами в программе необходимо определить файловую переменную. В Паскале поддерживается три файловых типа: типизированные и нетипизированные и текстовые файлы.
Описание типизированных файлов имеет вид:
var <имя переменной>: file of T;
где T – тип компоненты файла.
Пример: описание типизированной файловой переменной:
type
M = array[1..500] of Integer;
var
f1: file of Real;
f2: file of char;
f3: file of M;
Нетипизированные файлы описываются с помощью служебного слова file:
var f: file;
Описание файловых переменных текстового типа производится с помощью служебного слова text, например:
var <имя переменной>: text;
Файловые переменные, которые описаны в программе, называют логическими файлами. Все основные процедуры и функции, обеспечивающие ввод-вывод данных, работают только с логическими файлами.
Работу с файлом можно разбить на следующие этапы:
1) связывание логического файла с физическим;
2) открытие файла в нужном режиме;
3) работа с файлом;
4) закрытие файла.
В языке Паскаль имеется ряд процедур и функций, применимых для всех типов файлов (типизированных, нетипизированных, текстовых): Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult. Рассмотрим их подробнее.
Процедура Assign(var f; FileName: String) связывает логический файл f с физическим файлом, полное имя которого задано в строке FileName. При работе с файлами на дисках данная процедура должна быть вызвана раньше, чем будут выполняться какие-либо операции над ними.
Процедура Reset(var f) открывает логический файл f для последующего чтения данных. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента.
Процедура Rewrite(var f) открывает логический файл f для последующей записи данных. Если файл не существует, то он создается. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Естественно, что файл нельзя одновременно открыть для чтения и записи.
Процедура Close(var f) закрывает открытый до этого процедурами Reset или Rewrite логический файл f. Вызов процедуры Close необходим при завершении работы с файлом, открытым в режиме для записи.
Логическая функция EOF(var f): Boolean возвращает значение True, когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст.
Пример: проверить, является ли файл c:\test.txt пустым
var f: text;
begin
assign(f, ‘c:\test.txt’);
reset(f);
if eof(f) then writeln(‘файл пуст’)
else writeln(‘файл не пуст’);
end.
Процедура Rename(var f; NewName: String) позволяет переименовать физический файл на диске, связанный с логическим файлом f. Переименование возможно лишь для закрытого файла.
Пример: переименовать файл c:\a.txt в c:\test.txt
var f: file;
begin
assign(f, ‘c:\a.txt’);
rename(f, ‘c:\test.txt’);
end.
Процедура Erase(var f) уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.
Пример: удалить файл c:\test.txt
var f: file;
begin
assign(f, ‘c:\test.txt’);
erase(f);
end.
Функция IOResult: Integer возвращает целое число, соответствующее коду последней ошибки ввода-вывода. При нормальном завершении операции функция вернет значение 0. Значение функции IOResult необходимо присваивать какой-либо переменной, так как при каждом вызове функция обнуляет свое значение. Функция IOResult работает только при выключенном режиме проверок ошибок ввода-вывода или с ключом компиляции {$I-}.
Пример: проверить, существует ли файл с именем c:\test.txt