По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Обработка файлов средствами Free Pascal
В данной главе будут рассмотрены возможности языка Free Pascal для работы с файлами. По ходу изложения материала читатель также познакомится с компонентами Lazarus, предназначенными для выбора файла.
Предварительно давайте познакомимся с типами файлов.
7.1 Типы файлов в Free Pascal
Ввод данных с клавиатуры удобен при обработке небольших объёмов информации. В случае обработки массивов, состоящих из сотен элементов, использовать ввод данных с клавиатуры нерационально. В подобных случаях данные удобно хранить в файлах. Программа будет их считывать, обрабатывать и выводить результаты на экран или в файл. Рассмотрим, как это можно сделать.
C точки зрения программиста все файлы можно разделить на три класса:
- типизированные;
- бестиповые;
- текстовые.
Файлы, состоящие из компонентов одного типа (целые, вещественные, массивы и т. д.), число которых заранее не определено и может быть любым, называются типизированными. Они заканчиваются специальным символом "конец файла ", хранятся в двоичном виде, содержимое подобных файлов нельзя просмотреть обычным текстовым редактором, для их просмотра нужно писать специальную программу.
В бестиповых файлах информация считывается и записывается блоками определённого размера. В подобных файлах хранятся данные любого вида и структуры.
Текстовые файлы состоят из любых символов. При записи информации в текстовый файл все данные преобразуются к символьному типу, в котором и хранятся. Просмотреть данные в подобном файле можно с помощью любого текстового редактора. Информация в текстовом файле хранится построчно. В конце каждой строки хранится специальный символ "конец строки ". Конец самого файла обозначается символом "конец файла ".
Для работы с файлами в программе следует описать файловую переменную. Для работы с текстовым файлом файловая переменная (например f) описывается с помощью служебного слова text.
var f : text;
Для описания типизированных1Типизированные файлы иногда называют компонентными. файлов можно описать файловую переменную следующим образом:
var f : file of тип;
Бестиповый файл описывается с помощью служебного слова file.
Рассмотрим несколько примеров описания файловых переменных.
type massiv=array [ 1.. 25 ] of real; ff= file of real; var a : text; {Файловая переменная a для работы с текстовым файлом.} b : ff; {Файловая переменная f для работы с файлом вещественных чисел.} c : file of integer; {Файловая переменная c для работы с файлом целых} {чисел.} d : file of massiv; {Файловая переменная d для работы с типизированным} {файлом, элементами которого являются массивы из 25 вещественных чисел.}
Рассмотрим последовательно работу с файлами каждого типа.
7.2 Работа с типизированными файлами
Знакомство с методами обработки типизированных файлов начнём с подпрограмм, которые являются общими для всех типов файлов.
7.2.1 Процедура AssignFile
Для начала работы с файлом необходимо связать файловую переменную в программе с файлом на диске. Для этого используется процедура AssignFile(f,s), где f — имя файловой переменной, а s — полное имя файла на диске (файл должен находиться в текущем каталоге при условии, что к нему специально не указывается путь).
Рассмотрим примеры использования AssignFile для различных операционных систем.
var f : file of real; begin //Пример процедуры assign для ОС Windows. AssignFile ( f, ’ d : \ tp \tmp\ abc. dat ’ ); //Пример процедуры assign для ОС Linux. AssignFile ( f, ’ /home/ evgeniy/pascal /6/ pr1 / abc. dat ’ );
7.2.2 Процедуры reset, rewrite
После установления связи между файловой переменной и именем файла на диске нужно открыть файл, воспользовавшись процедурами reset или rewrite.
Процедура reset(f), где f — имя файловой переменной, открывает файл, связанный с файловой переменной f, после чего становится доступным для чтения первый элемент, хранящийся в файле. Далее можно выполнять чтение и запись данных из файла.
Процедура rewrite(f) создаёт пустой файл (месторасположение файла на диске определяется процедурой AssignFile) для последующей записи в него данных.
Внимание!
Если файл, связанный с файловой переменной f, существовал на диске, то после выполнения процедуры rewrite вся информация в нём уничтожается.
7.2.3 Процедура СloseFile
Процедура CloseFile(f), где f — имя файловой переменной, закрывает файл, который ранее был открыт процедурами rewrite или reset.
Процедуру CloseFile(f) следует обязательно использовать при закрытии файла, в который происходила запись данных.
Дело в том, что процедуры записи в файл не обращаются непосредственно к диску, они записывают информацию в специальный участок памяти, называемый буфером файла. После того как буфер заполнится, вся информация из него переносится в файл. При выполнении процедуры closefile сначала происходит запись буфера файла на диск, и только потом файл закрывается. Если его не закрыть вручную, то закрытие произойдёт автоматически при завершении работы программы. Однако при автоматическом закрытии файла информация из буфера файла не переносится на диск, и, как следствие, часть информации может пропасть.
Внимание!
После записи информации в файл, его обязательно закрывать с помощью процедуры CloseFile. Однако при чтении данных из файла нет необходимости в обязательном закрытии файла.
7.2.4 Процедура rename
Переименование файла, связанного с файловой переменной f, осуществляется в то время, когда он закрыт, при помощи процедуры rename(f,s), где f — файловая переменная, s — новое имя файла (строковая переменная).
7.2.5 Процедура erase
Удаление файла, связанного с переменной f, выполняется посредством процедуры erase(f), в которой f также является именем файловой переменной. Для корректного выполнения этой операции файл должен быть закрыт.
7.2.6 Функция eof
Функция eof(f) (end of file), где f — имя файловой переменной, принимает значение "истина" (true), если достигнут конец файла, иначе — "ложь" (false). С помощью этой функции можно проверить, достигнут ли конец файла и можно ли считывать очередную порцию данных.