Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

112

Input #1, Ввод: MsgBox Ввод

Line Input #1, Ввод: MsgBox Ввод

Close #1

End Sub

Ниже приведены диалоговые окна, выводимые инструкцией MsgBox.

2.14.5. Работа с файлом произвольного доступа

Приведем инструкции ввода/вывода информации при работе с файлом произвольного доступа, а также инструкции определения длины файла и текущей позиции указателя в файле.

Put

Записывает содержимое переменной в файл произвольного доступа.

Формат инструкции:

Put [#] НомерФайла, [НомерЗаписи] , ИмяПеременной

НомерФайла – номер файла

НомерЗаписи – номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись. Если аргумент НомерЗаписи опущен, то записывается на то место, где был установлен указатель после выполнения последней инструкции Get или Put, либо куда он переведен с помощью функции Seek

ИмяПеременной – имя переменной, содержащей данные, которые следует записать в файл

Get

Читает данные из открытого файла произвольного доступа в переменную. Формат инструкции:

Get [#] НомерФайла, [НомерЗаписи] , ИмяПеременной

НомерФайла – номер файла

НомерЗаписи – номер записи (для файлов в режиме Random) или номер байта (для файлов в режиме Binary), с которого следует начать чтение

113

Имяпеременной – имя переменной, в которую следует поместить считанные данные

Seek

Функция возвращает значение типа Long, определяющее текущее положение указателя чтения/записи внутри файла, открытого с помощью инструкции Open.

Формат функции:

Seek (НомерФайла)

LOF

Функция возвращает значение типа Long, представляющее размер файла в байтах, открытого с помощью инструкции Оpen . Для определения размера закрытого файла следует использовать функции FileLen.

Формат функции:

LOF (НомерФайла)

FileLen

Функция возвращает значение типа Long, содержащее размер файла в байтах.

Формат функции:

FileLen (Путь )

Как видно из приведенного в предыдущем разделе примера для считывания информации при помощи инструкции Input #, файл последовательного доступа иногда удобно задавать как последовательность записей, причем каждая из записей формируется из группы полей. В файле последовательного доступа существует только одна внутренняя структура, образованная разделителями: запятыми или специальными символами, обозначающими переход на новую строку.

В противоположность файлам последовательного доступа, в файлах произвольного доступа запись является встроенным элементом. Файл произвольного доступа – это файл, упорядоченный по номерам записей, что позволяет быстро переместиться на любую запись, минуя предыдущие.

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

Отметим, что при открытии файла произвольного доступа, в отличие от файла последовательного доступа, не надо специально указывать, открывается он для ввода или вывода информации. Ввод и вывод информации определяют команды Put и Get.

Приведем пример работы с файлом произвольного доступа Ведомость. Файл создается с помощью процедуры ЗаписьВФайлПД, которая

114

последовательно считывает данные из первого и второго столбца рабочего листа и затем вводит их в файл. В этой процедуре число вводимых записей фиксировано и равно 3. Процедура СчитываниеИзФайлаПД производит обратное действие – считывает данные из файла и вводит их в ячейки третьего и четвертого столбца рабочего листа.

При работе с файлом произвольного доступа можно определить число записей, не пересчитывая их. Число записей равно отношению размера файла к длине одной записи. Длина записи устанавливается при создании файла произвольного доступа и определяется типом переменной, при помощи которой файл был создан. Размер открытого файла определяется функцией LOF, а еще не открытого – функцией FileLen. В рассматриваемом случае число записей в файле равно LOF(l) / Len(Студент).

Структура записи Студент определяется на модульном уровне, т.е. перед первой процедурой модуля.

Type Студент

Фамилия As String * 20 Оценка As String * 5

End Type

Sub ЗаписьВФайлПД() Dim Студент As Студент

Dim i As Integer

Open "Список" For Random As #1 Len = Len(Студент) For i = 2 To 4

With Студент

.Фамилия = Cells(i, 1).Value

.Оценка = Cells(i, 2).Value End With

Put #1, i, Студент Next i

Close #1 End Sub

Sub СчитываниеИзФайлаПД() Dim Студент As Студент

Dim i As Integer

Dim n As Integer

Open "Список" For Random As #1 Len = Len(Студент) n = LOF(1) / Len(Студент) + 1

For i = 2 To n

Get #1, i, Студент

With Студент

Cells(i, 3).Value = .Фамилия

Cells(i, 4).Value = .Оценка End With