Тема: Объектно-ориентированный доступ к файлам и управление файлами
Цель работы: систематизировать знания по доступу файлов и управлению файлами
Ход работы:
Изучить теоретический материал.
Запустить примеры программ.
Записать примеры, с описанием и назначением, в тетради для лабораторных работ.
Типы файлов в VBA
В VBA допустима работа с тремя типами текстовых файлов. .
|
|
|
|
|
Файл последовательного доступа |
Рассматривается как последовательность строк произвольной длины, разделенных специальными символами. Чтение и запись в файл производится построчно |
|
|
Файл произвольного доступа |
Состоит из записей фиксированной длины и размер записи указывается при его открытии. Это позволяет локализовать любую запись в файле по ее номеру |
|
|
Бинарный файл |
Является частным случаем файла произвольного доступа. Размер записи в бинарном файле считается равным 1 байту |
|
|
|
|
|
Открытие и закрытие файла
Обсудим инструкции, связанные с открытием файла для операций ввода/вывода, а также с закрытием файла по завершению работы с ним.
|
|
|
|
|
Open |
Разрешает выполнение операций ввода/вывода при работе с файлом. Синтаксис: Open Путь For Режим [Access Доступ] [Блокировка] As [ # ] НомерФайла [Lеn=Длина]
длина — число, меньшее либо равное 32 767 (байт). Для файлов, открытых в режиме Random, это значение является длиной записи. Для файлов с последовательным доступом это значение является числом буферизуемых символов Про инструкцию open важно также знать, что во время ее работы VBA также резервирует файловый буфер в памяти компьютера для ускорения процесса записи и считывания (прямое записывание информации на диск может существенно замедлить выполнение программы, что особенно заметно при работе с большими файлами). Максимальное число файловых буферов устанавливается в системном файле Config.sys |
|
|
Close |
Завершает операции ввода/вывода с файлом, открытым с помощью инструкции open. Эта инструкция 'очищает буфер и указывает операционной системе обновить FAT (таблицу размещения файлов). Важно, чтобы каждый файл по завершении работы с ним был закрыт, иначе это может привести к частичной потере информации. Синтаксис: Close [СписокНомеровФайлов] Аргумент СписокНомеровФайлов может представлять один или несколько номеров файлов. При этом используется следующий синтаксис, где номерФайла представляет любой допустимый номер файла: [[#] номерФайла] [, [#] номерФайла] ... |
|
|
Reset |
Закрывает все активные файлы, открытые с помощью инструкции open, и записывает содержимое всех буферов файлов На диск, открытых с помощью инструкции Open |
|
|
FreeFile |
Функция возвращает доступный номер, который может использоваться в инструкции Open |
|
|
|
|
|
Приведем пример инструкции, открывающей для записи бинарный файл первый из рабочей папки, и затем инструкции, закрывающей этот бинарный файл.
Open "Первый" For Binary Access Write As #1 Close #1
Ввод данных в файл последовательного доступа
Обсудим инструкции, используемые при вводе информации в файл последовательного доступа.
|
|
|
|
|
Записывает форматированные данные в файл последовательного доступа. Синтаксис: Print #НомерФайла, [СписокВывода]
|
|
|
|
Write |
Записывает неформатированные данные в файл последовательного доступа. В отличие от инструкции Print, инструкция write вставляет запятые между элементами и заключает строки в кавычки по мере записи их в файл. Синтаксис: Write #НомерФайла, [СписокВывода]
|
|
|
|
|
|
Приведем две процедуры, использующие инструкции Print и write для создания файлов последовательного доступа. Сначала рассмотрим процедуру с инструкцией
Print. Sub
ПримерИспольэования Print
Open "С:\Новый" For Output As II
' Печатает текст в файл '
Print #1, "Тест"
' Печатает пустую строку в файл
Print #l,
' Печатает в двух зонах печати
Print #1, "Зона 1";
Tab;
"Зона 2" ;
Spc(3) ;
"3 пробела"
Close #1
End Sub
Результатом описанных выше инструкций будет файл со следующим содержимым:
Тест
Зона 1 Зона 2 3 пробела
Перейдем теперь к примеру процедуры, создающей файл последовательного
Достпа при помощи инструкции Write.
Sub ПримерИспользованияwriteе
Open "ЕщеПример"
For Output As #1
Write #1, "Пример";
"использования"
Write #l, "инструкции";
Write #1, "Write"
x = 1
Write #1, "Число";
х Close #1
End Sub
Результатом описанных выше инструкций будет файл со следующим содержимым:
"Пример","использования" "инструкции","Write" "Число",1
Обратите внимание на автоматическое размещение в файле разделителей -запятых, и то, что строковая информация берется в кавычки. В процедуре
ПримерислользованияWrite вторая инструкция write специально заканчивается знаком ";" Это обеспечивает вывод данных третьей инструкцией write в ту же строку файла, в которую выводила вторая инструкция.
Вывод данных из файла последовательного доступа
Обсудим инструкции и функции вывода информации из файла последовательного доступа, а также функцию идентификации конца файла.
|
|
|
|
|
Input # |
Считывает .данные из открытого файла последовательного доступа и присваивает их переменным. Данные, считываемые с помощью инструкции input I, обычно записываются в файл с помощью инструкции Write #. Синтаксис: Input #НомерФайла, СписокПеременных
|
|
|
Line Input # |
Считывает строку из открытого файла последовательного доступа и присваивает ее переменной типа string. Данные, считываемые с помощью инструкции Line input I, как правило, записываются в файл с помощью инструкции Print #. Синтаксис: Line Input #НомерФайла, ИмяПеременной Синтаксис инструкции Line Input1 содержит следующие элементы:
|
|
|
Функция Input |
Возвращает значение типа string, содержащее символы из файла, открытого в режиме input или Binary. Функция input считывает данные, записываемые в файл с помощью инструкции Print # или Put. Синтаксис: Input (Число, [#] НомерФайла)
|
|
|
ФУНКЦИЯ EOF |
Функция возвращает значение True при достижении конца файла. Синтаксис: EOF (НомерФайла} При последовательном считывании информации из файла часто используется следующий цикл: Do While Not EOF(l) Loop или, для тех пользователей, кто предпочитает инструкцию While - Wend инструкции Do While - Loop, следующий эквивалентный цикл: While Not EOF (I) Wend
|
|
|
|
|
|
Приведем пример использования инструкции input # для считывания данных из файла. В этом примере предполагается, что на диске существует файл группаЭкономистов, содержащий информацию о студентах. Файл был создан при помощи инструкции write # и состоит из двух столбцов, в первом из которых указывается фамилия, а во втором — оценка студента. Для удобства работы с информацией введен пользовательский тип Студенты. Процедура примериспользованияInput последовательно считывает фамилии и оценки из файла и выводит их в ячейки первого и второго столбца рабочего листа.
Туре Студенты
' Фамилия As String * 20
Оценка As String * 3
End Type
Sub ПримерИспользованияInput()
Dim Студент As Студенты
Open "ГруппаЭкономистов"
For Input As 12 i = 1
Do While Not EOF(2) With Студент