logo
Конспект лекций по КИТ

Работа с файлом произвольного доступа

Приведем инструкции ввода/вывода информации при работе с файлом произвольного доступа, а также инструкции определения длины файла и теку­щей позиции указателя в файле.

Put

Записывает содержимое переменной в файл произвольного доступа.

Синтаксис:

Put [#]НомерФайла, [НомерЗаписи], ИмяПеременной

  • НомерФайла — номер файла

НомерЗаписи — номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись или аргумент НомерЗаписи опущен, то записывается на то место, где был установлен указатель после выполнения по­следней инструкции Get или Put, либо куда он переведен с помощью функции Seek

ИмяПеременной — имя переменной, содержащей данные, ко­торые следует записать в файл

Get

Читает данные из открытого файла произвольного доступа в переменную.

Синтаксис:

Get [#]Номерфайла, [НомерЗаписи], ИмяПеременной

  • Номерфайла — номер файла

  • НомерЗаписи — номер записи (для файлов в режиме Random) или номер байта (для файлов в режиме Binary), с которого следует начать чтение

  • ИмяПеременной — имя переменной, в которую следует помес­тить считанные данные

Seek

Функция возвращает значение типа Long, определяющее теку­щее положение указателя чтения/записи внутри файла, откры­того с помощью инструкции Open.

Синтаксис:

Seek(Номерфайла)

LOF

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

Синтаксис:

LOF(Номерфайла)

FileLen

Возвращает значение типа Long, содержащее размер файла в байтах. Синтаксис:

FileLen(Путь)

Как видно из приведенного в предыдущем разделе примера для считывания информации при помощи инструкции Input # из файла ГруппаЭкономистов, файл последовательного доступа иногда удобно задавать как последо­вательность записей (в данном случае, записей о студентах), причем каждая из записей формируется из группы полей (в данном случае из полей Фами­лия и Оценка). Отметим, что такая группировка по записям не является чем-то присущим файлам последовательного доступа. Это просто подход, позволяющий упростить процесс последовательного считывания записей. В файле последовательного доступа существует только одна внутренняя структура, образованная разделителями (запятыми или специальными сим­волами, обозначающими переход на новую строку).

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

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

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

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

Отметим, что при открытии файла произвольного доступа, в отличие от файла последовательного доступа, не надо специально указывать, открыва­ется он для ввода или вывода информации. Ввод и вывод информации оп­ределяют команды Put и Get.

Приведем один пример работы с файлом произвольного доступа ГруппаЭкономистов, который имеет ту же структуру, что и в предыдущем примере. файл создается с помощью процедуры ЗаписьВФайл, которая последователь­но считывает данные из первого и второго столбца рабочего листа и затем вводит их в файл. В этой процедуре число вводимых записей фиксировано и равно 5. Процедура СчитываниеИзФайла производит обратное действие — счи­тывает данные из файла и вводит их в ячейки третьего и четвертого столбца рабочего листа. Интересной особенностью файла произвольного доступа является то, что при работе с ним можно определить число записей не пе­ресчитывая их. Число записей равно отношению размера файла к длине од­ной записи. Длина записи устанавливается при создании файла произволь­ного доступа и определяется типом переменной, при помощи которой файл был создан, размер открытого файла возвращается функцией lof, а еще не открытого — функцией FileLen. В рассматриваемом случае число записей в файле равно lof (l) / Len (Студент).

Type Студенты

Фамилия As;String * 20 Оценка As String * 3

End Type

Sub ЗаписьВФайл()

Dim Студент As Студенты

Dim i As Integer

Open "ГруппаЭкономистов" For Random As #1 Len = Len(Студент)

For i = 1 To 5

With Студент

.Фамилия = Cells (i, 1).Value .

Оценка = Cells(i, 2).Value

End With

Put #1, i. Студент

Next i

Close #1

End Sub

Sub СчитываниеИзФайла() Dim Студент As Студенты Dim i As Integer

Dim n As Integer

Open "ГруппаЭкономистов" For Random As #1 Len = Len(Студент)

n = LOF(l) / Len(Студент)

For i = 1 To n

Get #1, i. Студент

With Студент

Cells(i, 3).Value = .Фамилия

Cells(i, 4).Value = .Оценка

End With

Next i Close #1 End Sub