Материал: Программирование на языке Visual Basic для приложений. Подвальный С.Л., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Параметр номерФайла - это номер файла, открытого со способами доступа 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

Источник: https://studfile.net/preview/16565567/