Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава10 задание.doc
Скачиваний:
2
Добавлен:
29.08.2019
Размер:
108.03 Кб
Скачать

10.4. Открытие и закрытие файла

Основные операции с файлами – чтение из файла и запись в него. Перед этим файл необходимо открыть, а после завершения работы с файлом его необходимо закрыть. Этой цели служат следующие процедуры:

reset(<файловая переменная>);

открыть файл для чтения

(такой файл считается входным)

rewrite(<файловая переменная>);

открыть файл для записи

(такой файл считается выходным)

close(<файловая переменная>);

закрыть файл

Процедура reset открывает существующий физический файл, который связан с файловой переменной. При открытии указатель текущей записи файла устанавливается в его начало (на первый элемент). Для наглядности последующего изложения материала используем следующий образ: с файлом связано «окно», через которое виден один его элемент. После открытия файла для чтения, его «окно» устанавливается на первый элемент, если файл существует и не пуст.

Если файл не существует (в той директории, которая указана в процедуре Assign), возникает ошибка времени исполнения, и программа аварийно завершается по инициативе операционной системы. Эту реакцию операционной системы (ее называют стандартной реакцией операционной системы) можно подавить, предоставив программе возможность самостоятельно отреагировать на ошибку (открытия).

Для этого в среде MS DOS используется специальная директива компилятора {$I-}, которая должна быть помещена перед вызовом процедуры reset. Она означает следующее: «выключить стандартную реакцию операционной системы на ошибку ввода/вывода». При этом факт ошибки регистрируется, но выполнение программы продолжается. В программе можно установить, успешно или неудачно выполнилась процедура открытия, воспользовавшись функцией IOResult, которая возвращает значение 0, если операция закончилась успешно, и ненулевое значение (код ошибки) в противном случае.

Е

EOF(<файловая переменная>);

ще одна функция полезна при чтении из файла – это функция EOF (от End Of File):

Она возвращает значение FALSE, если «окно файла» указывает на имеющийся элемент, и значение TRUE, если «окно» вышло за пределы файла (за последний элемент его).

Процедура rewrite создает новый (пустой) физический файл. Если такой физический файл уже существует, он уничтожается, а вместо него создается новый пустой файл. При открытии «окно файла» устанавливается в той позиции, в которую будет произведена запись первого элемента (в момент выполнения операции записи в файл).

Процедура close разрывает связь логического и физического файлов. После этого можно использовать файловую переменную для связи с другим файлом или, при необходимости, для изменения статуса логического файла (например, вместо входного сделать файл выходным).

10.5. Чтение и запись

Процедуры чтения и записи – применительно к операциям с файлами были приведены в разделе «Кодирование вычислительных операций». Тем не менее, повторно приведем их структуру:

read(<ф.п.>,<имя переменной>);

присвоить переменной значение, прочитанное из файла

write(<ф.п.>,<имя переменной>);

записать в файл значение

переменной

Здесь ф.п. – файловая переменная.

После выполнения любой из приведенных операций «окно файла» смещается на следующий элемент файла. Именно в этом случае, при чтении из файла, когда окно выходит за пределы файла, возникает ситуация «Конец файла». При этом, естественно, операцию чтения из файла выполнить невозможно, и попытка чтения вызывает аварийное завершение программы.

Н

{ Вычислить и вывести на экран сумму целых чисел, }

{ являющихся элементами типизированного файла }

Program FSumm;

var

fl : file of integer;

x : integer;

sum: longint;

begin

Assign(fl,’myfile.dat’);

{$I-} {выключить стандартную реакцию

на ошибку ввода/вывода}

reset(fl);

{$I+} {включить стандартную реакцию

на ошибку ввода/вывода}

if (IOResult<>0) then

writeln(’Ошибка открытия файла. Конец работы.’)

else begin

{Вычисление суммы элементов файла}

Sum := 0;

while (not EOF(fl)) do begin

read(fl, x);

Sum := Sum + x;

end;

Close(fl);

writeln(’Сумма элементов файла = ’,Sum);

end;

end.

иже приведен пример, иллюстрирующий изложенный материал.