Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 17-18.doc
Скачиваний:
2
Добавлен:
14.07.2019
Размер:
201.22 Кб
Скачать

Тема: Объектно-ориентированный доступ к файлам и управление файлами

Цель работы: систематизировать знания по доступу файлов и управлению файлами

Ход работы:

  1. Изучить теоретический материал.

  2. Запустить примеры программ.

  3. Записать примеры, с описанием и назначением, в тетради для лабораторных работ.

Типы файлов в VBA

В VBA допустима работа с тремя типами текстовых файлов. .

Файл последовательного доступа

Рассматривается как последовательность строк произвольной длины, разделенных специальными символами. Чтение и запись в файл производится построчно

Файл произвольного доступа

Состоит из записей фиксированной длины и размер записи указывается при его открытии. Это позволяет локализовать любую запись в файле по ее номеру

Бинарный файл

Является частным случаем файла произвольного доступа. Размер записи в бинарном файле считается равным 1 байту

Открытие и закрытие файла

Обсудим инструкции, связанные с открытием файла для операций ввода/вывода, а также с закрытием файла по завершению работы с ним.

Open

Разрешает выполнение операций ввода/вывода при работе с файлом.

Синтаксис:

Open Путь For Режим [Access Доступ] [Блокировка] As [ # ] НомерФайла [Lеn=Длина]

  • Путь — строковое выражение, указывающее имя файла

  • Режим — устанавливает режим работы с файлом. Допустимые Значения: Append, Binary, Input, Output или Random

  • Доступ — устанавливает операции, разрешенные с открытым файлом. Допустимые значения: Read, Write или Read Write

  • Блокировка — устанавливает операции, разрешенные с открытым файлом другим процессам. Допустимые значения:

  • Shared, Lock Read, Lock Write и Lock Read Write и номерФайла — допустимый номер файла. Число в интервале от 1 до 255. Обратите внимание на то, что параметру Номер-Файла предшествует символ #. Значение номерФайла нельзя изменять, пока файл открыт. Но при следующем открытии файла номерФайла может быть другим числом

длина — число, меньшее либо равное 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

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

Print #НомерФайла, [СписокВывода]

  • номерФайла — номер файла О слисокВывода — выражение (или список выражений), записываемое в файл. В аргументе СписокВывода разделителем списка выводимых выражений является ";" (данные выводятся подряд) или "," (данные выводятся по зонам). Кроме того, в аргументе СписокВывода допускается использование функций Spc и таь:

    • spc(n) — используется для вставки п пробелов в файл

    • Tab(n) — устанавливает курсор в столбец с номером n

Write

Записывает неформатированные данные в файл последовательного доступа. В отличие от инструкции Print, инструкция write вставляет запятые между элементами и заключает строки в кавычки по мере записи их в файл.

Синтаксис:

Write #НомерФайла, [СписокВывода]

  • НомерФайла — номер файла

  • СписокВывода — выражение или список выражений, записываемых в файл Данные, записанные с помощью инструкции write, обычно считываются из файла с помощью инструкции input

Приведем две процедуры, использующие инструкции 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 содержит следующие элементы:

  • НомерФайла — номер файла

  • ИмяПеременной — имя переменной типа Variant или String

Функция

Input

Возвращает значение типа string, содержащее символы из файла, открытого в режиме input или Binary. Функция input считывает данные, записываемые в файл с помощью инструкции Print # или Put.

Синтаксис:

Input (Число, [#] НомерФайла)

  • Число задает число возвращаемых символов. Если аргумент Число равен 1, то производится посимвольное считывание данных.

ФУНКЦИЯ 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 Студент