Лекция № 22. Работа с файлами
Страница 4. Файлы с прямым доступом
Такие файлы хранят данные в формате, основанном на записи. Этот формат задается пользователем с помощью оператора 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
Sub command1()
Dim record As Recordtype
Dim number As Integer, retint As Integer, number1 As Integer
Dim numberfile As Integer
numberfile = FreeFile
Open "d:\5.txt" For Random As #numberfile Len = 36
number = 1
Do
record.name = InputBox("Введите фамилию", "Окно ввода")
record.namel = InputBox("Введите имя", "Окно ввода")
record.numbergroup = 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