Лекция № 22. Работа с файлами

К настоящему времени Вы заработали баллов: 0 из 0 возможных.

Страница 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

Вы прошли 100% лекции
100%