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


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


Запись с номером N будет действительно записана, а остальные получат значения по умолчанию, в соответствии с соглашениями, принятыми в VBA. Так что, если в файл пишется одна единственная запись с ключом 10000, то это означает, что в файле автоматически появляется 10000 записей и таков будет его размер. В нашем примере максимальный код равен 8,ѕ отсюда и размер файла равен 112 = 8*14

Рассмотрим теперь работу с этим файлом. Мы приведем две процедуры. Первая из них ведет последовательную обработку всех записей файла, читая их друг за другом. Вторая ѕ случайным образом генерирует запрос на получение записи файла со случайным ключом. Вот эти процедуры:

Public Sub PrintFile() Dim N As Integer, i As Integer, Code As Integer Dim MyRec As Товар 'Открыть файл Товаров для обработки Open Path & "Товары.9" For Random Access Read As #1 Len = Len(MyRec)

N = LOF(1) \ Len(MyRec) 'Число записей Debug.Print "Число записей файла-- ", N For i = 1 To N 'Установить позицию Seek 1, i 'Получить запись с заданным кодом Get #1,, MyRec Call PrintRec(MyRec) Next i Close #1 End Sub

Вот на какие моменты следует обратить внимание. Файл открывается теперь для чтения и при открытии корректно указывается длина записи. Для подсчета числа записей файла используется упоминавшаяся функция LOF. Заметьте, мы используем оператор Seek для установки позиции, но это скорее для проформы, поскольку в данной ситуации Seek не изменяет уже установленной позиции. Вот результаты работы этой процедуры:

Число записей файла-- 8 Код Товара: 1 Цена: 18 Код Товара: 2 Цена: 168 Код Товара: 3 Цена: 84 Код Товара: 0 Цена: 0 Код Товара: 0 Цена: 0 Код Товара: 6 Цена: 246 Код Товара: 7 Цена: 483 Код Товара: 8 Цена: 224

Мы уже пояснили, почему в файле оказалось 8 записей и почему часть из них имеет нулевые значения.

Следующая процедура работы с этим файлом демонстрирует возможность работы с ним, когда доступ к записям осуществляется в произвольном порядке, что, впрочем, демонстрировалось и при создании этого файла:

Public Sub WorkWithFile() Dim N As Integer, i As Integer, Code As Integer Dim MyRec As Товар Randomize 'Открыть файл Товаров для обработки Open Path & "Товары.9" For Random Access Read As #1 Len = Len(MyRec)




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



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