
Файлы с прямым доступом
Такие файлы хранят данные в формате, основанном на записи. Этот формат задается пользователем с помощью оператора Type...End Туре в зависимости от количества полей и их типа в записи:
Type recordtype
Variablel As type
Variable2 As type
…
VariableN As type
End Type
Записи читаются и/или записываются в три этапа: открытие файла, чтение или запись данных, закрытие файла.
Для открытия файла используется оператор Openв следующем формате:
Open "filename" For Random As #number Len = length
Если опустить параметр Len, то длина записи по умолчанию будет равна 128 байтам.
Для того чтобы сделать запись, нужно сначала объявить переменную, которая имеет тип, предварительно определенный пользователем с помощью оператора Type...End Type. Например^
Dim Record As recordtype
После этого нужно заполнить запись значениями отдельных переменных, представляющих поля записи:
Record.variablel = выражение1
Record.variable2 = выражение2
Сформированная запись записывается в файлс помощью оператораPutследующего формата:
Put #number, recordnumber, Record
где recordnumber– номер записи, начинающийся с 1 для первой записи. Если номер находится за пределами конца текущего файла, файл расширяется. При этом неиспользованные записи будут содержать «мусор», если их специально не очистить.
Читаются записииз файла с помощью оператораGetследующего формата:
Get #number, recordnumber, Record
Переменные в Record заполняются соответствующими данными из записи и могут использоваться для отображения, печати и др.
Рассмотрим пример работы с файлом прямого доступа. Пусть требуется разработать программу заполнения файла прямого доступа записями заданной структуры с последующим чтением записи заданного номера. Формат записи:
Поле1 – Фамилия
Поле2 – Имя
Поле3 – Номер группы
После разработки формы к проекту необходимо добавить модуль, в котором следует с помощью оператора Туре.. .End Typeввести структуру записи:
Type recordtype
Name As String* 15
Namel As String* 15
NumberGroup As String * 6
End Type
Privat Sub Command1_Click(
Dim Record As recordtype
Dim number As Integer, RetInt As Integer, number1 As Integer
Dim NumberFile As Integer
NumberFile = FreeFile
Open "C:\File.txt" For Random As #NumberFile Len = 36
number =1
Do
Record.Name = InputBox("Введите фамилию", "Окно ввода")
Record.Namel = InputBox("Введите имя", "Окно ввода")
Record.NumtaerGroup = InputBox("Введите группу", "Окно ввода")
Put #NumberFile, number, Record
RetInt = MsgBox("Продолжить ввод? Да или Нет", vbQuestion +vbYesNoCancel)
If RetInt = vbYes Then
number = number + 1
Else
Exit Do
End If
Loop
numberl = InputBox("Введите № записи,которую нужно выдать")
If numberl <= number And numberl <> 0 Then
Get #NumberFile, numberl, Record
Text1.Text = Record.Name
Text2.Text = Record.Name1
Text3.Text = Record.NumberGroup
Else
MsgBox "Запись не найдена", vbCritical, "Ошибка"
End If
End Sub