Типизированные файлы (Файлы произвольного доступа)

Файлы

Различают физические и логические файлы.

Физический файл – это именованная область носителя, предназначенная для хранения информации. Имя физического файла состоит из пути к файлу, имени и расширения, например: “D:\temp\imv\file1.dat”.

Логический файл – положительное целое число (дескриптор файла), которое при выполнении процедуры открытия файла связывается с физическим файлом.

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

В пособии рассматривается обработка файлов произвольного доступа (типизированных)..

Типизированные файлы (Файлы произвольного доступа)

Типизированный файл представляет собой последовательность компонентов одного типа. Тип компонентов может быть любой, кроме файлового типа.

Свойства типизированных файлов

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

Типизированный файл, как и все остальные, является файлом последовательного доступа. Но так как основное свойство типизированного файла заключается в том, что все компоненты в нем одного типа, и для их хранения выделяется одинаковое количество байт, можно организовать прямой доступ. Это значит, что к любой компоненте файла можно обратиться непосредственно, минуя предыдущие компоненты. Поэтому такие файлы называются файлами произвольного доступа.

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

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

Структура типизированного файла имеет вид, представленный на рис.1.

            EOF
           

Указатель файла


Рис 1.

Все компоненты в файле пронумерованы, имеют одинаковую длину. В конце файла ставится признак конца (End Of File). Каждый файл имеет указатель, который содержит адрес компоненты, с которой возможен обмен в данный момент. Указатель сдвигается на следующую компоненту при каждом чтении из файла или записи в файл.

В таблице 1 приведены стандартные процедуры для работы с типизированными файлами.

Таблица 1. Процедуры для работы с типизированными файлами

Имя процедуры Выполняемая работа и примеры
FileOpen(<дескриптор файла>, <имя физического файла>, <режим работы>,,,<длина компонента файла>) § Связывает имя физического файла с дескриптором. После выполнения этой процедуры у файла в программе появится «псевдоним» - дескриптор файла. Далее все подпрограммы обращаться к файлу должны, задавая дескриптор. В качестве дескриптора необходимо использовать целое положительное число. § <Режим работы> - OpenMode.Random Пример 1. Файл целых чисел. Dim a as integer, fn as string Fileopen(1,fn,OpenMode.Random,,,len(a)) Пример 2. Файл структур. Dim a as student, fn as string (student - тип-структура. Включает поля Фамилия, группа, массив оценок и т.д. Fileopen(2,fn,OpenMode.Random,,,80) 80 – длина каждого компонента файла. Предварительно необходимо сделать оценку длины, исходя из состава полей структуры. И задать такую длину компонента файла, чтобы хватило места для самой длинной записи о студенте.
Fileget(<дескриптор файла>, <имя переменной соответствующего типа>) § Читает из файла содержимое очередного компонента и записывает в переменную. § Указатель сдвигается на следующий компонент файла. Реализуется последовательный доступ к элементам файла. § Если указатель достигает признак конца файла (EOF) и делается попытка чтения из файла, то происходит прерывание работы программы. Dim a as integer Fileopen(1,fn,OpenMode.Random,,,len(a)) Fileget(1,a)
Fileget(<дескриптор файла>, <имя переменной соответствующего типа>, <номер компонента файла>) § Указатель файла перемещает на компонент, номер которого задан. § Читает из файла содержимое соответствующего компонента и записывает в переменную. Реализуется прямой доступ к элементам файла. (Если делается попытка чтения после конца файла, то происходит прерывание работы программы.) § Указатель сдвигается на следующую компоненту файла. Dim a as integer Fileopen(1,fn,OpenMode.Random,,,len(a)) Fileget(1,a,5)
Fileput(<дескриптор файла>, <имя переменной соответствующего типа>) § Записывает в файл значение переменной в компонент, на котором стоял указатель файла. § После записи переменной указатель сдвигается на следующий компонент файла. Реализуется последовательный доступ к элементам файла. Dim a as integer a=15 Fileopen(1,fn,OpenMode.Random,,,len(a)) Fileput(1,a)
Fileput(<дескриптор файла>, <имя переменной соответствующего типа>, <номер компонента файла>) § Указатель файла перемещает на компонент, номер которого задан. § Записывает в файл значение переменной в соответствующий компонент файла. Реализуется прямой доступ к элементам файла. § После записи переменной указатель сдвигается на следующий компонент файла. Dim a as integer a=15 Fileopen(1,fn,OpenMode.Random,,,len(a)) Fileput(1,a,6)
Fileclose((<дескриптор файла>) § Прерывает связь между дескриптором и физическим файлом. § Файл окончательно обновляется и закрывается. FileClose(1)
Kill(<имя физического файла>) Удаляет физический файл из папки. Перед использованием Kill(fn) необходимо файл закрыть. FileClose(1) Kill(fn)
Rename(<старое физическое имя файла>, <новое физическое имя файла>) Переименовывает внешний физический файл. Rename(Fn,”A:\b.dat”)

В таблице 2 приведены стандартные функции для работы с типизированными файлами.

Таблица 2. Функции для работы с типизированными файлами

Имя функции Выполняемая работа и примеры
Eof(<дескриптор файла >) as Boolean; Проверяет, стоит ли указатель файла на признаке конца файла? Если да, возвращает True, иначе False. If Eof(1) then...
Lof(<дескриптор файла >) as integer; Возвращает длину файла в байтах. Dim dl as integer dl=Lof(F)

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: