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

       

Один пример работы с Binary файлом


Бинарные файлы пишутся и читаются порциями, состоящими из произвольного числа байтов. Доступ возможен к любому байту этого файла в произвольном порядке. Никакого редактирования при операциях с этим файлом не производится и вся ответственность за сохранением структуры информации ложится на программиста. Операции над этим файлом выполняются операторами Get и Put, но можно читать этот файл побайтно, используя и уже упоминавшуюся функцию Input. Мы не будем строить специальный пример для работы с этим файлом, а ограничимся примером чтения ранее созданного текстового файла "readme.txt", который откроем, как Binary файл. В этом примере мы прочитаем последовательно этот файл порциями по 20 байтов. Заодно покажем, как организуется чтение "хвоста" файла ѕ его последней порции. Возможно, с содержательной точки зрения пример не очень хорош, поскольку будет нарушена реальная структура читаемых данных, нов этом то и вся суть дела при работе с такими файлами. Программист сам должен восстановить структуру данных, чем мы, в данном случае, заниматься не будем. Но вот сам пример:

Public Sub Test3() 'Чтение Binary файла Dim MyLocation As Long, MyLoc As Long, MyLine As String

Open Path & "readme.txt" For Binary As #1

MyLocation = 0 Do While MyLocation + 20 < LOF(1) ' Читаем допустимую порцию MyLine = Input(20, #1) MyLocation = Loc(1): MyLoc = Seek(1) ' 2 способа определения текущей позиции Debug.Print MyLine; Tab; MyLocation; Tab; MyLoc Loop 'Читаем последнюю порцию MyLoc = LOF(1) - MyLocation If MyLoc > 0 Then MyLine = Input(MyLoc, #1) MyLocation = Loc(1): MyLoc = Seek(1) Debug.Print MyLine, MyLocation, MyLoc, LOF(1) End If Close #1 End Sub

Перед комментариями приведем результаты работы:

"Первая строка файла 20 21 " "Зона 1","Зона 2" 40 41

"Привет,","старик! 60 61 " "Мама ","мыла "," 80 81 раму мылом. " #FALS 100 101 E# #1999-06-14# #N 120 121 ULL# 3.1416,"3,14", 140 141 "03,142" 6 #ERROR 160 161 2000# 167 168 167


Как видите, файл читается со всеми, входящими в него символами, в том числе и непечатаемыми, задающими конец строки. Заметим, что восстановить исходную структуру строк достаточно просто, было бы только желание. Обращаем внимание на новую функцию, которую мы ввели в этой программе - функцию LOC. Она вычисляет текущую позицию файла и возвращает значение на единицу меньшее, чем функция Seek, которая возвращает позицию следующего байта.

И последний совет в этой лекции, средств VBA для работы с файлами произвольного доступа достаточно для выполнения основных операций: создания, записи, чтения и модификации данных. Но средства поиска данных в файле (оператор Seek) весьма примитивны. С их помощью трудно решать задачи упорядочения файлов, поиска записей по значениям отдельных полей и другие задачи, характерные для работы с базами данных. Для небольших файлов можно создавать индексные массивы, в которых номера записей упорядочены в соответствии с требуемым критерием, и поддерживать этот порядок при всех изменениях файла. Для больших - заводить свои индексные файлы и т. п. Но владельцам Office 2000 не следует заниматься программированием собственных СУБД. В их распоряжении - возможность переписать содержимое любого файла произвольного доступа в ячейки рабочего листа Excel или в базу данных (таблицу) Access и использовать для работы с его данными всю мощь этих инструментов.


Содержание раздела