Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №13.doc
Скачиваний:
8
Добавлен:
14.09.2019
Размер:
236.03 Кб
Скачать

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

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

При открытии файлов произвольного доступа возможен только один режим доступа — Random. Кстати, этот режим является режимом по умолчанию для функции Open.

Используя возможности Visual Basic, можно создать файл произвольного доступа пользовательской, то есть своей собственной структуры. Продемонстрируем это на небольшом примере. С помощью оператора Type объявим тип переменной, имеющей заданную структуру записи:

Type Person

Soname As String*20

Name As String * 15

End Type

В данном примере объявлена структура в виде записи из двух полей. Первым полем является фамилия, а вторым — имя.

Замечание

Объявление пользовательского типа данных можно осуществить двумя способами:

  1. В новом программном модуле. Для добавления программного модуля в проект следует выполнить команду Add Module (Добавить модуль) из меню Project (Проект) и на вкладке New (Новый) появившегося диалогового окна Add Module выбрать значок с названием Module (Модуль).

  2. В окне программного кода, где описаны все процедуры. Для этого перед служебным словом Type в описании пользовательского типа нужно указать служебное слово Private.

 

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

Файл произвольного доступа открывается несколько иначе, чем файл последовательного доступа. Синтаксис оператора Open при этом выглядит следующим образом:

Open имя_файла [For Random] As номер_файла Len=длина

где:

  • имя_файла — полное имя файла;

  • номер_файла — номер файла;

  • длина — длина записи в байтах. Если записывается строковая величина ее длину можно определить с помощью оператора Len, а если числовая - то исходя из того, сколькими байтами кодируется данный тип.

При использовании оператора Open для открытия файла произвольного доступа атрибут For не обязателен, так как в Visual Basic 6 этот параметр устанавливается по умолчанию. Как видно из синтаксиса, в отличие от файла с последовательным доступом, при открытии файла с произвольным доступом необходимо обязательно указывать длину записи.

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

Данные из файла произвольного доступа, как правило, считываются записями. Для этого используется оператор Get #, который имеет следующий синтаксис:

Get #номер_файла, [номер_записи], имя_переменной

где:

  • номер_файла— номер файла;

  • номер_записиномер записи в файле;

  • имя_переменной — переменная, в которую считывается нужная запись.

Если параметр номер_записи в функции Get не указан, считывается текущая запись, на которой позиционирован указатель.

Пусть, например, в телефонном справочнике имеется информация о фамилии, имени и номере телефон. Опишем программный код добавления записи в телефонную книгу и чтение записи (все записи будут хранится в файле с расширением .dat). Данные для записи будут считываться из текстовых полей.

Private Type abonent

Soname As String*20

Name As String*15

Tel As String*6

End Type

Dim a as abonent

Dim k As Integer

Private Sub Form_Load()

k = 1

End Sub

новая запись

Private Sub New

n=FreeFile

a.soname=Text1.Text

a.name=Text2.Text

a.tel=Text3.Text

Open «C:\справочник.dat» As #n Len=Len(a)

Put #n, k, a

k=k+1

Close #n

End Sub

чтение данных из файла и вывод их в диалоговом окне

Private Sub Reading

n=FreeFile

Open «C:\справочник.dat» As #n Len=Len(a)

Get #n, k, a

k=k+1

Close #n

MsgBox (a.soname + a.name + a.tel)

End Sub

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