Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 3....doc
Скачиваний:
61
Добавлен:
17.12.2018
Размер:
1.65 Mб
Скачать

Один пример работы с 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 и использовать для работы с его данными всю мощь этих инструментов.