Eof (f)

РАБОТА С ФАЙЛАМИ В ПАСКАЛЕ

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

Краткие теоретические сведения.

С понятием файла пользователь компьютера сталкивается постоянно. Язык программирования Паскаль позволяет работать с компонентами файла — записями, с полями записей. Файл в Паскале состоит из однотипных данных. С данными файла можно производить две операции: запись или чте­ние. В Паскале осуществляется обработка последовательных файлов, в которых данные записываются или считываются одно за другим. Запись можно прочесть, минуя предыдущие, если известен ее порядковый номер в файле. Чтобы выполнять действия с данными файла, файл надо открыть для соответствующей операции.

 

Этапы, которые необходимы для каждой операции при работе с файлом:

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

Описание файла. Описание файла может быть в разделе типов или в разделе переменных. Пусть файл f состоит из целых чисел. Его описание имеет вид:

Var

f: file of integer;

a: integer;

где a — компонента файла данного того же типа, что и записи файла. Тип данных файла указывается после слова of в описании, это может быть числовой или символьный тип, массив или запись. Сложный тип записи файла необходимо предварительно описать в разделе type.

Установление соответствия между логическим и физическим именами файла. Логическое имя — имя переменной из разделаvar, под которым файл присутствует в программе. Физическое имя — имя из каталога оглавления диска. Оператор установления соответствия между именами файлов:

assign(логическое имя файла, физическое имя); например:

assign (f, ‘F.DAT’);

Физическое имя заключено в апострофы, оно появится в том же оглавлении, где находится файл turbo.exe.

Открытие файла для операции запись это действие выполняется оператором:

rewrite (f);

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

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

Запись данных в файл производит оператор:

write (f, a);

Пример. Пусть требуется создать файл из 10 целых чисел.

Программа име­ет вид:

program Р38;

Var

f:file of integer; a, i:integer;

Begin

assign (f, ‘F.DAT’);

rewrite (f);

writeln (‘введите 10 целых чисел, после каждого нажимайте ‘);

for i: = 1 to 10do

Begin

readln(a);

write (f, a)

End

End.

Если создать файл и никаких больше действий не производить, то возможности просмотреть данные файлы вне программы, практически нет. Поэтому большинство задач обработки файлов начинаются словами: «Дан файл». Очевидно, как и для других задач с подобным началом, файл необходимо сначала создать, т. е. выполнить описанные четыре этапа. Чтобы работать с данными файла, их надо прежде всего прочесть, открыть файл для чтения.

Операция чтения. Для чтения данных из файла его следует описать, установить соответствие между логическим и физическим именем, а затем открыть для чтения и считывать данные. Первые два шага — описание и установление соответствия имен — такие же, как и для операции записи. Если с файлом совершаются различные операции, то перед выполнением следующей его надо закрыть оператором: close (f);

Открытие файла для чтения производится оператором:

reset (f);

Читать данные из файла позволяет оператор:

read (f, a);

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

Функция обработка признака конца файла:

eof (f)

Поскольку количество записей в файле неизвестно, ис­пользовать при чтении данных файла цикл-пересчет нельзя. Поэтому применяется цикл-пока. Его заголовок