- •Лабораторная работа №4 Виды файлов. Файловая переменная
- •Последовательность действий
- •Общие процедуры и функции
- •Текстовые файлы
- •Процедуры и функции для текстовых файлов
- •Стандартные текстовые файлы input и output
- •Структура модуля
- •Пример: Решим следующую несложную задачу. Пусть имеется два участка треугольной формы, обнесенных забором. Каким-то образом известны координаты вершин этих треугольников. Требуется определить:
- •Практическое задание Задания 1
Общие процедуры и функции
В Pascal существует ряд процедур и функций, применимых для файлов любых типов.
Процедура assign(ФайловаяПеременная, ИмяФайла). Предшествует другим процедурам, т. к. ставит в соответствие физическому файлу на внешнем устройстве логический файл — файловую переменную (связывает их). ИмяФайла должно представлять собой выражение строкового типа. Дальнейшие операции с переменной ФайловаяПеременная будут выполняться над физическим файлом ИмяФайла. Процедуру assign недопустимо использовать для уже открытого файла. Прежде чем использовать файловую переменную повторно, необходимо закрыть файл с помощью процедуры close. После вызова assign связь файловой переменной с физическим файлом существует до тех пор, пока не будет выполнен другой assign для данной файловой переменной. Следовательно, файл можно повторно открыть без дополнительного использования процедуры assign даже после закрытия close.
Процедура reset(ФайловаяПеременная) открывает существующий файл на чтение (открывает входной файл) и ставит указатель на начало первого элемента файла. При отсутствии внешнего файла с указанным именем возникает сообщение об ошибке File not found (Файл не найден). Если при чтении файла возникнет необходимость вернуть указатель в его начало, достаточно будет просто применить процедуру reset к этому файлу еще раз
Функция ioresult — возвращает статус последней выполненной операции ввода-вывода (успешно она прошла или нет). Пример использования данной функции для обработки ошибок ввода-вывода уже рассматривался. При работе с файлами рекомендуется использовать ее при выполнении любого действия, которое может привести к ошибке. Например, при попытке открыть файл может оказаться, что файла с таким именем нет в текущем или заданном каталоге. Стандартный способ обработки такой ошибки — аварийная остановка программы с сообщением File not found (файл не найден). Обработка функции ioresult позволит выполнить проверку существования файла на диске более гибко. В Delphi для этих целей имеется более удобный способ — стандартная функция fileexists.
Процедура rewrite(ФайловаяПеременная) — создает и открывает новый (выходной) файл для последующей записи данных. После ее успешного выполнения файл готов к записи в него первого элемента.
Обратите внимание — использование rewrite требует особой аккуратности. Если физический файл с указанным именем уже существует, то он удаляется, и на его месте создается новый пустой файл с тем же именем. Для предотвращения потери информации на практике необходимо создавать резервные копии файлов, над которыми могут производиться опасные действия.
Процедура close(ФайловаяПеременная). Используя процедуру close, программист должен закрыть файл, после того как в программе будет завершена его обработка. В противном случае может произойти потеря данных. При закрытии внешний (физический) файл обновляется и его автоматически завершает символ конца файла. Впоследствии ФайловаяПеременная может быть связана с другим (или вновь с тем же самым) физическим файлом.
Процедура rename(ФайловаяПеременная, ИмяФайла) — используется для того, чтобы переименовать неоткрытый внешний файл любого типа. Новое имя задается строкой ИмяФайла.
Процедура erase(ФайловаяПеременная) — удаляет неоткрытый внешний файл любого типа, задаваемый параметром ФайловаяПеременная
Обратите внимание — процедуры rename и erase нельзя использовать для открытых файлов. Их необходимо предварительно закрыть. Если файл не существует, возникает ошибка выполнения программы.
Логическая функция eof(ФайловаяПеременная) — выполняет проверку, не достигнут ли конец файла (End Of File) при чтении из него данных. Функция возвращает true, если конец файла обнаружен и указатель текущей позиции находится в конце файла за его последним символом. Это значит, что последний элемент в файле уже прочитан или файл после открытия оказался пуст. В противном случае функция возвращает false.
Замечание
Функция eof находит широкое применение в задачах обработки файлов, поскольку позволяет задать условие выполнения цикла для чтения данных из файла. Особенно она важна для текстовых файлов. Если параметр ФайловаяПеременная отсутствует, подразумевается консоль.
В качестве примера создадим программно новый текстовый файл с именем file01.txt, содержащий одну строку текста, которая записывается в него в виде текстовой константы. Для чтения используем строковую переменную str.
var f: text; str: string;
begin
assign(f,'file01.txt'); rewrite(f);
writeln(f,'Этот простой текстовый файл содержит строку текста');
close(f);
assign(f,'file01.txt'); reset(f);
readln(f, str);
close(f);
writeln('Проверка ввода/вывода в файл:'); writeln(str);
end.
