Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНые РАБОТАы с 9.doc
Скачиваний:
26
Добавлен:
10.05.2015
Размер:
545.28 Кб
Скачать

Типизированный файл

Типизированный файл - это файл, в котором записаны идентичные структуры. Типизированный файл можно создать только программным путем. Он состоит из записей фиксированной длины. Содержимое файла - это машинное представление данных. Типизированные файлы так же называют двоичными т.к. они содержат информацию в двоичном коде. С каждым типизированным файлом связана переменная - указатель. Указатель определяет смещение от начала файла в количестве прочитанных или записанных записей. При открытии файла значение указателя равно нулю, т.е. не выполнено ни одной операции ввода/вывода. Если только одна запись записана или прочитана, то значение указателя равно единице.

Формат объявление файловой переменной

Var

Имя ф.п.: file of Тип записи файла;

Тип записи это любой тип языка Pascal кроме файлового.

Операции над типизированным файлом

1) Назначение файловой переменной физического файла

Это связывание файловой переменной с файлом. Осуществляется аналогично связыванию для текстовых файлов. Связь файловой переменной с файлом устанавливается с помощью процедуры Assingfile.

Формат процедуры:

Assingfile(файловая переменная, имя файла);

2) Создание файла

Создание типизированного файла осуществляется процедурой Rewrite(Ф.п.).

Пример

Var

F: file of integer;

Begin

Assignfile(F,’A.Dat’);

Rewrite(F);

End.

После выполнения программы в текущей папке появится файл A.dat. При открытии существующего файла процедурой Rewrite (файловая переменная ) файл удаляется. Открытый этой процедурой файл допускает выполнение операции чтения и записи.

3) Открыть существующий для чтения и записи

При открытии типизированного файла процедурой Reset(Ф.п.) данные файла доступны для чтения, но открытый таким образом файл допускает выполнение операции записи в файл.

4) Чтение данных из файла

Осуществляется процедурой

Read(Ф.п., Список переменных);

Переменные в списке должны быть того же типа что и тип файла.

Пример использования процедуры read

Var

F: file of integer;

A:integer;

B:real;

Begin

Assignfile(F,’A.Dat’);

Reset(F);

Read(F,A);

Read(F,B); //Это будет ошибка т.к. тип переменной и файла различен.

End.

5) Записать в файл

Осуществляется процедурой

Write(ф.п., список переменных);

Переменные в списке должны быть того же типа что и тип файла

Пример

Var

F: file of integer;

A:integer;

B:real;

Begin

Assignfile(F,’A.Dat’);

Rewrite(F);

A:=5;

Write(F,A);

End.

6) Закрытие файла

Осуществляет процедура Closefile(Ф.п.). После выполнения этой операции доступ к данным файла невозможен, но связь файловой переменной и с физическим файлом сохраняется.

7) Определение кол-во записей в файле.

. В типизированных файлах не рекомендуется использовать функцию Eof. При обработке всех записей файла, следует использовать функцию Filesize(ф.п.):Longint, которая возвращает количество записей в файле.

Пример

Прочитать и вывести все записи файла.

Var

F: file of integer;

A,i:integer;

Begin

Assignfile(F,’A.Dat’);

Reset(F);

For I:=1 to filesize(F)-1 do

Begin

Read(F,A);

Write(A,’ ‘)

End;

End.

8)Определение позиции в типизированном файле

Осуществляет процедура filepos(Ф.п.):longint. Она возвращает номер записи в файле, к которой будет применяться операция ввода/вывода.

Пример

Var

F: file of integer;

A:integer;

Begin

Assignfile(F,’A.Dat’);

Reset(F);

Read(F,A);

Write(Filepos(F)); //результат равен 1( позиция первая )

End.

9) Организация прямого доступа

В типизированных файлах можно выполнять операции чтения и записи к записям с произвольным номером, не выходящим за количество записей файла. Эту операцию выполняет процедура Seek(Ф.п.,N). Ее действие: осуществляет перемещение указателя в позицию N. N - это значение целого типа.

Примеры использования процедуры

Seek(F,0); //Указатель перемещается в положение 0 т.е. доступна первая запись файла

Seek(F,Filesize(F)); //Переместит указатель в конец файла (за последнюю запись )

Seek(F,5); //Указатель установится перед пятой записью.