Основы офисного программирования и язык VBA


Ввод-вывод для файлов произвольного доступа и бинарных файлов - часть 2


Если параметр номер-записи опустить, данные будут записаны (прочитаны) в текущую позицию. Уже говорилось, что установить текущую позицию можно оператором Seek. Отметим также, что после выполнения операторов Get и Put текущей становится позиция очередной записи (байта), следующей за только что прочитанной записью (байтом). Заметьте, даже если этот параметр опущен, разделяющая запятая все же остается в операторе вызова.
  • Параметр переменная - имя переменной, значение которой должно быть записано в файл (в которую будет прочитана запись).
  • Вот простой пример записи и чтения в файл произвольного доступа:

    Public Sub Test1() Dim N As Integer Open Path & "test.1" For Random Access Read Write As #1 Len = 2 N = 1 Put 1, 1, N Get 1, 1, N Debug.Print N, LOF(1) N = 2 Put 1, 2, N Get 1, 2, N Debug.Print N, LOF(1) N = 3 Put 1, 1, N Get 1, 1, N Debug.Print N, LOF(1) Close #1

    End Sub

    Используемая здесь функция LOF(номер-файла) возвращает длину файла в байтах. Заметьте, будет создан файл из двух записей, поскольку третий по счету оператор Put изменяет значение первой записи, так что перед закрытием функция LOF возвратит значение 4.

    Но давайте рассмотрим чуть более серьезный пример. Рассмотрим работу с файлом, который назовем "Товары.9". Этот файл будет содержать информацию о товарах. Код товара будет служить ключом записи. Зная код товара, можно будет найти запись в файле. На практике, когда формальным ключом записи, как в нашем случае, является ее порядковый номер, всегда задается некоторая функция, которая реальный ключ, возможно заданный несколькими параметрами, преобразует в порядковый номер. В нашем примере, чтобы не вводить таких преобразований, будем полагать, что код товара изменяется в пределах от 1 до N и, следовательно, он может служить формальным ключом записи. Вот как задается пользовательский тип, описывающий товар:

    Type Товар КодТовара As Integer Наименование As String * 10 Цена As Integer End Type

    Создадим файл, хранящий записи этого типа.


    Начало  Назад  Вперед



    Книжный магазин