- •Лабораторная работа №13.
- •Тема: Файлы в Visual Basic.
- •Теоретическая часть.
- •Традиционный подход при работе с файлами
- •Открытие файлов
- •Input #номер_файла, имя_переменной1, имя_переменной2, …
- •Переход на заданную позицию в файле
- •Запись данных
- •Работа с файлами произвольного доступа
- •Чтение данных из файла произвольного доступа
- •Seek #номер_файла, позиция
- •Запись в файл произвольного доступа
- •Изменение данных в файле произвольного доступа
- •Работа с двоичными файлами
- •Пример двоичного файла
- •Замечание
Работа с файлами произвольного доступа
Файл с произвольным доступом обладает заранее заданной структурой и состоит из записей. Каждая запись в файле — это некоторая порция данных, которая имеет строго определенный размер и свой конкретный номер в файле. Доступ к данным в файле произвольного доступа осуществляется именно по номеру записи. Данные из файла такого типа читаются и записываются записями. Примерами файла произвольного доступа являются базы данных, всегда имеющие строго определенную структуру.
При открытии файлов произвольного доступа возможен только один режим доступа — Random. Кстати, этот режим является режимом по умолчанию для функции Open.
Используя возможности Visual Basic, можно создать файл произвольного доступа пользовательской, то есть своей собственной структуры. Продемонстрируем это на небольшом примере. С помощью оператора Type объявим тип переменной, имеющей заданную структуру записи:
Type Person
Soname As String*20
Name As String * 15
End Type
В данном примере объявлена структура в виде записи из двух полей. Первым полем является фамилия, а вторым — имя.
Замечание
Объявление пользовательского типа данных можно осуществить двумя способами:
В новом программном модуле. Для добавления программного модуля в проект следует выполнить команду Add Module (Добавить модуль) из меню Project (Проект) и на вкладке New (Новый) появившегося диалогового окна Add Module выбрать значок с названием Module (Модуль).
В окне программного кода, где описаны все процедуры. Для этого перед служебным словом 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. Синтаксис этого оператора такой же, как для файлов последовательного доступа, но имеет другой смысл. Если для последовательных файлов позиционирование выполняется по символам, то для файлов произвольного доступа — по номеру записи: