While Not Eof(Fx) Do

End.

Begin

End.

Close(fx)

Write(Fx,X)

Begin

Begin

Файлы. Файловые переменные

Понятие «файл» обычно связывают с информацией на устройствах внешней памяти. В Паскале понятие файла употребляется в двух смыслах:

• как поименованная информация на внешнем устройстве (внешний файл);

• как переменная файлового типа в Паскаль-программе (внутренний файл).

В программе между этими объектами устанавливается связь. Вследствие этого все, что происходит в процессе выполнения программы с внутренним файлом, дублируется во внешнем файле. С элементами файла можно выполнять только две операции: читать из файла и записывать в файл.

Файловый тип переменной — это структурированный тип, представляющий собой совокупность однотипных элементов, количество которых заранее (до исполнения программы) не определено.

Структура описания файловой переменной:

Var <имя переменной>: File Of <тип элемента>;

где <тип элемента> может быть любым, кроме файлового типа.

Например:

Var

Fi:File Of Integer;

Fr:File Of Real;

Fc: File Of Char;

Файл можно представить как последовательную цепочку элементов (эл.), пронумерованных от 0, заканчивающуюся специальным кодом, называемым маркером конца (<м. к.>):

эл.0 эл. 1 ….. эл. N м.к.

Количество элементов, хранящихся в данный момент в файле, называется его текущей длиной. Существует специальная ячейка памяти, которая хранит адрес элемента файла, предназначенного для текущей обработки (записи или чтения). Этот адрес называется указателем или окном файла.

Для того чтобы начать запись в файл, его следует открыть для записи. Это обеспечивает процедура REWRITE (FV); где FV — имя файловой переменной. При этом указатель устанавливается на начало файла. Если в файле есть информация, то она исчезает. Схематически выполнение процедуры REWRITE можно представить так:

До:

эл.0 эл. 1 ….. эл. N м.к.

 

REWRITE(FV,V);

После:

м.к.  

­

Стрелка внизу отмечает позицию указателя.

Запись в файл осуществляется процедурой WRITE (FV, V); где V — переменная того же типа, что и файл FV. Запись происходит туда, где установлено окно (указатель). Сначала записывается значение, затем указатель смещается в следующую позицию. Если новый элемент вносится в конец файла, то сдвигается маркер конца. Схема выполнения оператора:

До:

эл.0 эл. 1 ….. эл. N м.к.

­

WRITE(FV,V);

После:

эл.0 эл. 1 ….. эл. N V м.к.

­

Пример 1. В файловую переменную Fx занести 20 символов, последовательно вводимых с клавиатуры.

Var Fx: File Of char;

X: char; I: Byte;

Assign(FX,’d:\1.dat’);

Rewrite(Fx);

For I:=1 To 20 Do

Write ('?'); ReadLn(X);

End;

Для чтения элементов файла с его начала следует открыть файл для чтения. Это делает процедура Reset (FV). В результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется. Схема выполнения процедуры:

До:

эл.0 эл.1 ….. эл.N м.к.

­

RESET(FV);

После:

эл.0 эл.1 ….. эл.N м.к.

 

 

­

Чтение из файла осуществляется процедурой READ (FV, V); где V — переменная того же типа, что и файл FV. Значение текущего элемента файла записывается в переменную v; указатель смещается к следующему элементу.

До:

эл.0 эл.1 ….. эл.К эл.К+1 …. эл.N м.к.

­

READ(FV,V);

После:

эл.0 эл.1 ….. эл.К эл.К+1 …. эл.N м.к.

­

Доступ к элементам файла может быть последовательным или прямым. В стандартном Паскале реализован только последовательный доступ.

Принцип последовательного доступа: для того чтобы прочитать n-ю запись файла, сначала нужно прочитать все предыдущие записи с 1-й по (n-1)-ю.

Пример 2. В переменной х получить 10-й элемент символьного файла Fx.

Program A;

Var Fx: File Of char;

X: char;

….

Reset(Fx);

For I:=l To 10 Do Read(Fx,X)

….

Функция Eof (FV) проверяет маркер конца файла (end of file). Это логическая функция, которая получает значение true, если указатель установлен на маркер конца, в противном случае — false.

Пример 3. Просуммировать все числа из файла целых чисел Fx.

 

…..

Reset(Fx);

Sx:=0;