|
Файлы последовательного доступа
Последовательные файлы состоят из рядов строк текста, и их часто называют ASCII-файлами. Каждая строка текста завершается символом возврата каретки (ASCII 13), а файл заканчивается символом Ctrl-Z (ASCII 26). Каждый символ текста занимает один байт. Текст можно просматривать и редактировать с помощью редактора Notepad (Блокнот). С последовательным файлом можно работать в двух режимах: запись (или добавление данных) и чтение. Для создания последовательного файла необходимо открыть файл, записать данные и закрыть файл. Файл открывается оператором вида:
Open "filename" For mode As #number
filename – полное имя файла, mode – режим доступа к файлу: Output – это режим, при котором файл открыт для записи; обычно при этом режиме создается новый файл; если открывается для записи уже существующий файл, то ранее хранимая информация будет стерта. Input – это режим, при котором файл открыт только для чтения информации, записывать в файл при таком режиме нельзя; Append – это режим, при котором файл открыт для записи, но в отличие от режима OUTPUT, при котором добавление новой информации приводит к уничтожению имеющейся, в режиме APPEND новая информация размещается в конце файла, за последней записью без уничтожения ранее имеющейся number – идентифицирует файл в программе и может принимать значения от 1 до 255. Номер связан с файлом только тогда, когда файл открыт.
В последовательный файл данные записываются с помощью оператора Print или Write. Каждый оператор записывает одну строку данных в файл, заканчивающуюся возвратом каретки. Формат операторов следующий:
Print #number, valuel, value2,... Write #number, valuel, value2,...
Оператор Print записывает данные с метками между отдельными элементами. Он подходит для записи текстовых файлов с одним элементом на строку. Оператор Write хранит данные в формате, разделенном запятыми.
Файл закрывается оператором Close в формате
Close #number
Чтение последовательного файла, как и его создание, состоит из трех этапов: открытие файла, чтение данных и закрытие файла. Файл открывается с помощью оператора следующего вида:
Open "filename" For Input As #number
Данные из файла читаются с помощью одного из приведенных операторов:
Line Input #number, string Input #number, variablel, variable2,...
Line Input считывает строку полностью в переменную string и может использоваться для чтения текстовых файлов, когда они записаны с помощью оператора Print. Оператор считывает из файла по одному символу, пока не встретит символ «возврат каретки» или последовательность «возврат каретки» – перевод строки». Input считывает данные и размещает их в переменных заданного списка. Данные считываемые оператором записываются в файл с помощью оператора Write #. Последовательные файлы всегда должны читаться с начала файла. Для обнаружения конца файла можно использовать функцию EOF. После завершения чтения файл нужно закрыть с помощью команды Close.
Файлы с прямым доступом
Такие файлы хранят данные в формате, основанном на записи. Этот формат задается пользователем с помощью оператора Type...End Турев зависимости от количества полей и их типа в записи: Type recordtype Variablel As type Variable2 As type … VariableN As type End Type Записи читаются и/или записываются в три этапа: открытие файла, чтение или запись данных, закрытие файла. Для открытия файла используется оператор Open в следующем формате: Open "filename" For Random As #number Len = length Если опустить параметр Len, то длина записи по умолчанию будет равна 128 байтам. Для того чтобы сделать запись, нужно сначала объявить переменную, которая имеет тип, предварительно определенный пользователем с помощью оператора Type...End Type. Например^ Dim Record As recordtype После этого нужно заполнить запись значениями отдельных переменных, представляющих поля записи: Record.variablel = выражение1 Record.variable2 = выражение2 Сформированная запись записывается в файл с помощью оператора Put следующего формата: Put #number, recordnumber, Record где recordnumber – номер записи, начинающийся с 1 для первой записи. Если номер находится за пределами конца текущего файла, файл расширяется. При этом неиспользованные записи будут содержать «мусор», если их специально не очистить. Читаются записи из файла с помощью оператора Get следующего формата: Get #number, recordnumber, Record Переменные в Record заполняются соответствующими данными из записи и могут использоваться для отображения, печати и др. Рассмотрим пример работы с файлом прямого доступа. Пусть требуется разработать программу заполнения файла прямого доступа записями заданной структуры с последующим чтением записи заданного номера. Формат записи: Поле1 – Фамилия Поле2 – Имя Поле3 – Номер группы После разработки формы к проекту необходимо добавить модуль, в котором следует с помощью оператора Туре.. .End Type ввести структуру записи: Type recordtype Name As String* 15 Namel As String* 15 NumberGroup As String * 6 End Type Privat Sub Command1_Click() Dim Record As recordtype Dim number As Integer, RetInt As Integer, number1 As Integer Dim NumberFile As Integer NumberFile = FreeFile Open "C:\File.txt" For Random As #NumberFile Len = 36 number =1 Do Record.Name = InputBox("Введите фамилию", "Окно ввода") Record.Namel = InputBox("Введите имя", "Окно ввода") Record. NumberGroup = InputBox("Введите группу", "Окно ввода") Put #NumberFile, number, Record RetInt = MsgBox("Продолжить ввод? Да или Нет", vbQuestion +vbYesNoCancel) If RetInt = vbYes Then number = number + 1 Else Exit Do End If Loop numberl = InputBox("Введите № записи,которую нужно выдать") If numberl <= number And numberl <> 0 Then Get #NumberFile, numberl, Record Text1.Text = Record.Name Text2.Text = Record.Name1 Text3.Text = Record.NumberGroup Else MsgBox "Запись не найдена", vbCritical, "Ошибка" End If End Sub
Использование объектов
Операторы программ VBA, использующие объекты, обычно выполнявши одно или несколько следующих действий: · определяют текущее состояние или статус объекта путем выборки значения, сохраняемого в определенном свойстве; · изменяют состояние или статус объекта установкой значения, сохраненного в определенном свойстве; · используют один из методов объекта, обеспечивая выполнение объектом одной из его встроенных задач. Например, можно определить имя активного в данный момент рабочего листа в Excel, выполняя выборку строки, сохраняемой в свойстве Name рабочего листа. (Свойство Name рабочего листа содержит имя рабочего листа, как показано на ярлыке листа.) Чтобы изменить имя рабочего листа, необходимей присвоить новую строку свойству Name этого рабочего листа. Для добавления рабочего листа в рабочую книгу используется метод Add рабочей книги. Прежде чем применять свойства и методы некоторого объекта, их следует сначала определить. В операторах VBA используется следующий общий синтаксис для определения свойства или метода объекта: Object.identifier Object – любая допустимая ссылка на объект. Объектные ссылки создают заданием переменной для ссылки на объект или использованием методов или свойств объектов, возвращающих объектную ссылку. Identifier – любое допустимое имя свойства или метода; VBA отображает сообщение о runtime-ошибке при попытке использовать свойства или методы, которые не являются в действительности частью указанного объекта. Например Word-процедура, выводящая имя активного документа имеет вид:
Пример 1. Активный документ Sub ActDocum() MsgBox "Активный документ: " & ActiveDocument.Name End Sub
Точка (.) отделяет объектную ссылку от имени свойства или метода. В некотором смысле эта точка-разделитель также соединяет объектную ссылку с идентификатором свойства или метода. Поскольку идет обращение к свойству или методу посредством объекта, необходимо определять объектную ссылку и идентификатор свойства или метода вместе. Точка-разделитель указывает VBA, где заканчивается объектная ссылка и где начинается идентификатор свойства или метода. В то же самое время точка-разделитель соединяет объектную ссылку и имя свойства или метода для образования единого идентификатора в операторе VBA. В табл. 1 приведены несколько из наиболее важных объектов (с точки рения программиста VBA) в Excel 2000/2002. В таблице показано имя объекта и краткое описание этого объекта.
|
|||||||||||||||||||
|