Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2313

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
1.4 Mб
Скачать

Параметр номерФайла - это номер файла, открытого со способами доступа Append или Output.

Параметр списокВывода - это выражение или список выражений следующего вида:

[ { Spc(n) | Tab[ (n) ] } ] [Выражение] [позицияСимвола]

spc(n) задает количество вставляемых пробелов, a Tab(n) задает номер столбца, в котором будет начинаться текст. Выражение - это строковое или числовое выражение. Параметр позицияСимвола задает точку вхождения следующего за выражением символа.

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

Здесь смысл параметра номерФайла тот же, а списокВывода - это одно или несколько выражений, разделенных пробелами, запятыми или точками с запятой. Для некоторых значений (таких, как Null, True и т. д.) есть ряд соглашений, однозначно определяющих форму их вывода. Например, значение Null выводится строкой символов #Null#.

Отличие между Print и Write в том, что последний оператор при записи вставляет запятые между соседними значениями и заключает строковые выражения в кавычки. В следующем примере мы открыли файл с книгами в режиме Output, записали в него данные, а после закрыли файл.

Листинг.Вывод данных в последовательный файл

Sub WriteToFile()

Open "C:\books.txt" For Output As #1

Print #1, "Office XP. VBA"; Spc(l); "Разработка приложений" Write #1, "Новиков"; "700"; "14"

Print #1, "Word 2002. "; Spc(1); "Самоучитель"

Write #1, "Petrov"; "200"; "10" Close

End Sub

93

Перейдем теперь к рассмотрению процедур ввода Input (если данные были записаны процедурой Write) и Line input (если данные были записаны процедурой Print). Синтаксис таков:

Input #номерФайла, списокПеременных

списокПеременных - это одна или несколько переменных, разделенных запятыми, в которые будут считываться данные из файла, причем переменные должны иметь тип, к которому могут быть приведены данные. На переменные накладывается еще одно ограничение: они не могут быть массивами, записями или объектами, но могут быть элементами массивов или полями записей.

При чтении информации, которая была записана в файл процедурой write, происходит автоматическое преобразование к исходному формату, т. е. отбрасываются кавычки для строк, игнорируются запятые и пробелы, слово #Null# переводится в значение Null и т. д.

Процедура Line input используется для построчного ввода информации.

Line Input #номерФайла, переменная

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

В следующем примере мы открыли файл books.txt, только в режиме input, и считали данные построчно в переменную temp, используя цикл с постусловием, в котором условие - это достижение конца файла, проверяемое функцией EOF (End of File).

Листинг. Ввод данных из последовательного файла

Sub ReadFromFile()

Open "C:\books.txt" For Input As #1

94

Do

Input #1, temp

MsgBox temp

Loop Until EOF(1)

Close

End Sub

Произвольный и бинарный доступ к файлам

В описанных выше процедурах записи и чтения данные записывались в конец файла, а считывались сначала, что оказывается нерациональным, если необходимо прочитать или записать информацию в середине файла. Рассмотренные ниже процедуры позволяют читать и записывать данные в произвольном порядке.

Мы одновременно рассмотрим синтаксис и процедуры записи (Put) и процедуры чтения (Get), поскольку они почти одинаковы:

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

Итак, номерФайла - это номер файла, открытого со способом доступа либо Random, либо Binary.

номерЗаписи - это числовое выражение, определяющее позицию, куда будут записаны (откуда будут считаны) данные.

Для Random - это номер записи в файле, для Binary - номер байта в файле. По умолчанию данные будут записаны (прочитаны) в текущую позицию.

переменная - имя переменной, значение которой будет записано (прочитано). Для установки необходимой позиции используется процедура Seek.

Seek [#]номерФайла, номерЗаписи

Управление файлами и каталогами

Следующая группа процедур и функций (табл.) позволяет работать с файловой системой компьютера, т. е. создавать,

95

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

Таблица 6.3 Процедуры работы с файловой системой

Функция

Описание

ChDrive диск

Задает текущий диск

ChDir путь

Задает текущую папку, указанную в

 

параметре путь

MkDir путь

Создает новую папку, указанную в

 

параметре путь

RmDir путь

Удаляет папку

SetAttr имяФайла, ат-

Изменяет атрибуты файла

рибут

атрибут — константа (0, 1, 2, 4, 32)

Name Имя1 As Имя2

Переименовывает файл

FileCopy файл1, файл2

Копирует файл1 в файл2

Kill файл

Удаляет файл

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

Листинг. Создание папки

Public Sub CreateFolder()

Dim path As String, root As String path = "books"

root = "C:\" ChDrive root MkDir path

Open root & path & "\books.txt" For Output As #1 Close #1

End Sub

96

6.3. Функции проверки типов

Часто бывает необходимым узнать, какой тип имеет переменная, например string или integer, и в зависимости от ответа выполнять определенные действия. Для подобной проверки в VBA существуют две группы функций. В первой группе (см. табл. 6.4) функции сравнивают тип переменной или значение выражения лишь с одним встроенным типом данных или с определенным значением и возвращают логическое значение True, если типы совпадают, или False - в противном случае.

 

Таблица 6.4

Функции проверки типов данных

Функция

Описание

 

 

IsArray (переменная)

Является ли переменная массивом

 

 

IsDate (выражение)

Является ли выражение датой

IsEmpty (переменная)

Была ли переменная инициализиро-

 

вана

IsError (выражение)

Является ли выражение значением

 

ошибки. Как правило, требуется про-

 

верить ошибку, определенную поль-

 

зователем

IsNull (выражение)

Равен ли результат выражения пусто-

 

му значению

IsNumeric (выраже-

Является ли результат числовым зна-

ние)

чением

IsObject (переменная)

Является ли переменная переменной-

 

объектом

IsMissing (аргумент)

Был ли опущен необязательный аргу-

 

мент в процедуре или функции

Во второй группе всего две функции: VarName и TypeName, имеющие следующий синтаксис:

VarType (переменная)

97

Функция возвращает значение типа Integer, однозначно определяющее по таблице значений.

Таблица 6.5 Возвращаемые значения функции VarType

Тип

Номер

Тип

Номер

Тип

Номер

Empty

0

Currency

6

Variant

12

Null

1

Date

7

DataObject

13

Integer

2

String

8

Decimal

14

Long

3

Object

9

Byte

17

Single

4

Error

10

UserDefinedType

36

Double

5

Boolean

11

Array

8209

TypeName (переменная)

Функция возвращает одну из следующих строк: Byte,

Integer, Long, Single, Double, Currency, Decimal, Date, String,

Boolean, Error, Empty, Null, Object, Object Type, Unknown (не-

известная переменная) и Nothing (переменная, не содержащая ссылки на объект).

Если переменная является массивом, то возвращается строка с типом и пустыми скобками. Например, если определен массив Array типа integer,

TypeName(Array) = "Integer()".

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

6.4. Процедуры и функции работы со строками

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

 

 

Таблица 6.6

 

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

Функция

 

Описание

 

 

 

Len(строка)

 

Возвращает длину строки

98

Продолжение табл. 6.6

Space(число)

Создает строку, содержащую ука-

 

занное число пробелов

 

String (число, символ)

Создает строку, содержащую ука-

 

занное число указанных символов

StrComp (строка1,

Возвращает

результат

сравнения

строка2 [, сравнение])

строк.

Необязательный

параметр

 

сравнение указывает, каким спосо-

 

бом производить сравнение: двоич-

 

ным - 0 (по умолчанию) или посим-

 

вольным (без учета регистра) - 1.

 

Если строка1 меньше, чем строка2,

 

то возвращается 1, равна - 0, боль-

 

ше - -1

 

 

 

StrReverse (строка)

Возвращает строку "наоборот". На-

 

пример,

StrReverse("строка") =

 

"акортс"

 

 

Left (строка, длина)

Выделяет из строки-аргумента

 

строку с указанным числом симво-

 

лов слева.

 

 

Right(строка, длина )

Выделяет из строки-аргумента

 

строку с указанным числом симво-

 

лов справа

 

 

Mid(строка, старт [,

Выделяет из строки-аргумента

длина] )

строку, начиная с позиции старт, с

 

указанным числом символов (по

 

умолчанию - до конца)

 

Replace(строка, строка-

Заменяет вхождения параметра

Поиск, строкаЗамена )

строкаПоиск

значением

параметра

 

строкаЗамена в строке

 

 

 

LTrim (строка)

Возвращает копию строки-аргумен-

 

та, из которой удалены пробелы,

 

находившиеся в начале строки

RTrim (строка )

Возвращает копию строки-аргу-

 

мента, из которой удалены пробе-

99

Окончание табл. 6.6

 

лы, находившиеся в конце строки

 

 

 

 

Trim (строка )

Возвращает

копию

строки-

 

аргумента, из которой удалены

 

пробелы, находившиеся как в нача-

 

ле, так и в конце строки

 

 

 

InStr([старт, ] строка1,

Возвращает позицию первого вхо-

строка2 [, сравнение])

ждения строки строка2 в строке

 

строка1 (старт - позиция, с которой

 

следует начинать поиск)

 

LCase(строка)

Преобразует

символы

строки-

 

аргумента к нижнему регистру. На-

 

пример, LCase("Hello") =

"hello"

UCase(строка)

Преобразует

символы

строки-

 

аргумента к верхнему регистру

Split(строка

Преобразует (расщепляет) строку к

[,разделитель])

массиву подстрок. По умолчанию,

 

разделитель – пробел

 

Join(массивСтрок

Преобразует (объединяет) массив-

[,разделитель])

Строк к строке с разделителем

6.5. Математические функции

VBA имеет общепринятый набор математических функций, который представлен в следующей таблице.

Таблица 6.7

Математические функции

Функция Значение

Abs (число) Возвращает абсолютное значение (модуль) аргумента

Atn (число) Возвращает арктангенс аргумента (в радианах)

Cos (число) Возвращает косинус аргумента. Число задается в радианах

100

 

Продолжение табл. 6.7

Ехр (число)

Возвращает результат возведения экспонен-

 

ты в степень аргумента

Fix (число)

Возвращает тот же аргумент, но без дробных

 

разрядов

Int (число)

Возвращает целую часть аргумента

Log (число)

Возвращает натуральный логарифм аргумен-

 

та

Rnd (число)

Возвращает случайное число

Sgn (число)

Возвращает-1, если число меньше 0; 0, если

 

равно 0, и 1, если больше 0

Sin (число)

Возвращает синус аргумента

Sqr (число)

Возвращает квадратный корень из аргумента

Tan (число)

Возвращает тангенс аргумента (в радианах)

Несколько комментариев к таблице. Для тригонометрических функций аргументы задаются в радианах, т. е. для вычисления косинуса 90 градусов необходимо записать cos(Pi/2)2, Функции Int и Fix фактически выполняют округление числа, но они делают это по-разному. Если число отрицательное, то Int возвращает ближайшее целое число, меньшее чем аргумент, a Fix, наоборот, большее (это не распространяется на положительные числа). Функция Rnd - это генератор случайных чисел, но генерирует он их в зависимости от параметров, введенных пользователем. Так, если бы вы ввели число большее 0 или бы вообще его не ввели, то сгенерировалось бы новое случайное число; если аргумент будет равен 0, то результатом будет предыдущее число, а если оно отрицательное, то результатом будет одно и то же число, определяемое аргументом.

6.6. Процедуры и функции работы со временем и датами

Данные типа Date занимают 4 байта, столько же занимают данные типа Single (вещественное число одинарной точности). Начальная дата равна 30.12.1899. Таким образом, число 1 будет означать 31 декабря 1899 года, а число 36474.12345 рав-

101

но 10.11.99 2:57:46. Процедуры делятся на две группы: первые определяют даты, вторые - их обрабатывают.

К первой группе относятся следующие процедуры:

-Date - возвращает текущую системную дату;

-Time - возвращает текущее системное время;

-Now - возвращает текущие системные дату и время. Текущие дата и время определяются по внутренним ча-

сам компьютера, которые можно установить с помощью панели управления Windows. Можно переопределить значения системного времени, используя ключевые слова Date и Time.

Кстати, вы можете переопределить значения системного времени, используя ключевые слова Date и Time.

Например, если текущая дата 21.11.2002, тогда следующая процедура "отправит вас в будущее" на месяц вперед:

NewD = Date +31 Date = NewD

В результате выполнения вышеуказанного кода будут переустановлены внутренние часы компьютера, что повлияет не только на данную программу, но и на все приложения, выполняемые на данном компьютере.

Вторая группа функций представлена в табл. 6.8.

 

 

Таблица 6.8

Функции для работ с датами

 

Функция

Описание

 

DateAdd(интервал, число,

Предназначена для

добавления

дата)

или вычитания из даты указан-

 

ного числа указанных времен-

 

ных интервала. Таблица времен-

 

ных интервалов приведена ниже.

DateDiff(интервал, дата1,

Возвращает число

указанных

дата2 [, первыйДеньНеде-

временных интервалов, являю-

ли [, перваяНеделяГода]])

щееся разностью между датами

 

дата2 и дата1. Например,

 

DateDiff("Y","25.11.02",

 

"31.12.02") = 36

 

102

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]