Пользовательские типы данных

 

Оператор Туре позволяет на уровне модуля определить пользовательскую структуру данных, включающую другие разнородные, логически связанные переменные, например:

[Private | Public] Type <typename>

< elementname1> As <type>

< elementname2> As <type>

...

End Type

 

где <typename> – имя пользовательского типа данных;

< elementname> – имя составляющей структуры.

 

В модуле с помощью операторов Dim или Public необходимо объявить переменную, использующую пользовательский тип данных. Как правило, это массивы.

Пример 19.14.

Type Student

FullName As String *20

Group As Single

BirthDay As Date

Hight As Integer ...

End Type

Dim Student_Card (1 To 1000) As Student

 

Тип Student служит для объявления массива Student_Card размерностью 1000 элементов, структура записи включает: фамилию, имя, номер учебной группы, дату рождения, рост.

Объявление констант

Константа– величина, сохраняющая постоянное значение во время выполнения программы, но изменяемая по желанию пользователя.

 

Константы объявляют с помощью оператора:

 

Const <const> = <значение>

 

где <const> – имя константы;

<значение> – значение константы.

 

Для констант существует понятие сфера действия:

глобальные константы имеют ключевое слово Public:

 

Public Const Datel=#12.12.96#

 

локальные константы:

 

Const Date2=# 12.12.97#

 

Локальные константы объявляются в пределах процедуры или модуля, глобальные константы – на уровне внешнего модуля и доступны для всех вложенных модулей и процедур.

VBA имеет встроенные константы, которые применяют без специального объявления и начинаются с символов vb. Excel 5.0 использует встроенные константы, начинающиеся символами xl.

ОПЕРАТОРЫ ЯЗЫКА VBA

Оператор присваивания

 

Данный тип оператора служит для присвоения начальных значений, записи результата вычисления в переменную, изменения значений.

Оператор присваивания имеет следующую структуру построения:

 

<var>= <formula>

 

где <var> – имя переменной;

<formula> – формула.

 

Переменная слева от знака "=" может быть простой переменной, элементом массива или свойством объекта. Формула состоит из переменных, констант, операций и функций.

 

Пример 19.15.

Place="d:\windows\system"

File="GameTree.Exe"

Student_Card( 100).Group= 133

 

С помощью оператора присваивания сохраняются результаты вычислений по формуле в памяти машины – под именем переменной.

VBA использует различные операции для построения выражений, проверки условий. Операции имеют определенный приоритет (старшинство) выполнения (табл. 19.5).

 

Таблица 19.5. Основные операции языка VBA

 

 

Приоритеты перечислены в порядке убывания (чем больше номер, тем меньше приоритет операции). Для изменения естественного порядка выполнения операций используются круглые скобки.

Пример 19.16.

Disct=(S – P)/(dt)^2

Сначала вычисляется разность S – Р, затем произведение dt возводится в степень 2, после этого вычисляется частное от деления; результат присваивается переменной Disct.

Оператор комментариев

 

Комментарий – это пояснение к программе. Любой комментарий начинается в строке с произвольного места программы символом '. Комментарии предназначены для сопровождения и поддержки программ. Как правило, разработка и сопровождение программ осуществляются различными специалистами. Текст комментариев должен обеспечить понимание логики программы, отражать ее специфику.

 

Пример 19.17.

 

Текст программы Комментарий
Option Explicit Обязательность объявления всех переменных в модуле перед их использованием
Sub случ_числа() Процедура генерации случайных чисел в выделенной области электронной таблицы Excel 5.0
Dim numrows As Integer; numcols As Integer Dim therow As Integer; thecol As Integer numrows = Selection.Rows.Count numcols = Selection.Columns.Count   Randomize Объявление переменных   Присвоение значения числа строк и столбцов в выделенной области электронной таблицы Запуск генератора случайных чисел
For therow = 1 To numrows   For thecol = 1 To numcols Selection.Cells(therow; thecol).Value = Rnd Организация цикла типа Fоr-Next, внешний цикл Внутренний цикл Присваивание текущей ячейке случайного числа Selection – выбор ячейки Cells – метод доступа к ячейке с определенными координатами Value – свойство "значение"
Next thecol Конец внутреннего цикла
Next therow Конец внешнего цикла
End Sub Конец процедуры

Процедуры

 

Программные модули VBA состоят из процедур (одной или более).

 

Процедура– минимальный модуль в составе прикладной программы на языке VBA.

 

Процедуры имеют стандартное оформление:

Sub <имя_процедуры> (аргументы)

..................................

тело процедуры (операторы)

..................................

End Sub

 

Оператор Sub - объявление процедуры, задается имя, указывается состав аргументов, передаваемых при вызове процедуры из программы. Каждому оператору Sub обязательно соответствует End Sub.

Тело процедуры – набор последовательно выполняемых операторов на языке VBA.

В программе можно не только использовать процедуры данного программного модуля, но и ссылаться на процедуры других модулей текущей рабочей книги, а также процедуры других рабочих книг. Для этого необходимо задать ссылки; при нахождении на рабочем листе модуля выполняется команда СЕРВИС, Ссылки. В диалоговом окне «Ссылки» (рис. 19.22) показан список доступных ссылок на библиотеки или другие рабочие книги.

 

Рис. 19.22.Диалоговое окно для подключения программных модулей и их процедур

 

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

Различают 4 типа процедур:

процедуры общего назначения (стандартные), как правило, не вносят изменений вне себя;

командные процедуры расширяют возможности прикладных программ, реализуя новые виды обработки;

процедуры обработки событий выполняются при наступлении событий определенного вида (например, открытие или закрытие электронной таблицы Excel, нажатие кнопки, перемещение объекта и т.п.);

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

Существует несколько вариантов вызова процедур (все необходимые ссылки на соответствующие процедуры заранее устанавливают).

1. Из другой процедуры того же модуля вызов осуществляется по имени процедуры

 

 

2. Из другой процедуры другого (подключенного) модуля вызов осуществляется по имени модуля, имени процедуры (в пределах одного приложения)

 

 

3. Из другого приложения (другой рабочей книги ППП Excel 5.0) – вызов осуществляется по имени модуля, имени процедуры и имени рабочей книги

 

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

 

Чтобы предотвратить доступ к процедуре из других модулей, процедуру делают частной. Для этого в операторе процедуры следует указать:

 

 

Для защиты модуля рабочей книги от доступа к нему из процедур другой рабочей книги в начале модуля указывают: Option Private Module

Если в момент вызова процедуре передаются какие-то величины либо значения при ее выполнении, определяют список аргументов, который содержит данные обмена с вызывающей процедурой.

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

Объявление аргументов в заголовке процедуры имеет стандартный вид:

Sub Proc_B (Val1 As Single; Val2 As Date;... )

Через выбранный разделитель списков (в зависимости от настройки Windows – запятая или точка сзапятой) следуют аргументы с указанием имени и типа значения.

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

 

Пример 19.18.Процедура вычисления площади прямоугольника по двум сторонам

 

Текст программы Комментарий
Sub SquarPr (L As Single; H As Single; S As Single; Optional F) If IsMissing (F) Then F=100   S=L*H End Sub Объявление процедуры SquarPr и ее аргументов Встроенная функция VBA – IsMissing проверяет наличие аргумента F, если F не задано, по умолчанию F присваивается значение 100 (F имеет тип Variant) Вычисление площади прямоугольника Конец процедуры

 

Вызов такой процедуры выполняется различным образом.

1-й вариант – непосредственное задание значений аргументов при вызове процедуры

 

Текст программы Комментарий
Sub Proc_A () Dim Sq as Single SquarPr 12; 23; Sq     End Sub Вызывающая процедура   Вызов процедуры с передачей значений длин сторон прямоугольника в явном виде, результат вычисления будет присвоен переменной Sq Конец процедуры

 

2-й вариант – через имена переменных, которым присвоены значения

 

Текст программы Комментарий
Sub Proc_A ()   Dim Sq as Single Dim LL as Single Dim HH as Single LL=12 HH=23 SquarPr LL HH Sq   End Sub Вызывающая процедура Объявление переменных ПЛОЩАДЬ ДЛИНА ВЫСОТА   Присвоение значений переменным   Вызов процедуры с передачей значений длин сторон прямоугольника в явном виде, результат вычисления будет присвоен переменной Sq Конец процедуры

 

3-й вариант – использование списка поименованных аргументов при вызове процедуры

 

Текст программы Комментарий
Sub Proc_A ()   Dim Sq as Single Dim LL as Single Dim HH as Single LL=12 HH=23 SquarPr L:=LL; H:=HH; S:=Sq     End Sub Вызывающая процедура Объявление переменных ПЛОЩАДЬ ДЛИНА ВЫСОТА Присвоение значений переменным   Вызов процедуры с указанием соответствия имен аргументов вызываемой процедуры и имен переменных вызывающей процедуры, которые разделяются в строке знаком : Конец процедуры

 

При завершении работы вызываемой процедуры и передаче управления вызывающей процедуре происходит потеря значений переменных, объявленных в вызываемой процедуре.

Для предотвращения этого сохраняемые переменные следует объявлять оператором:

 

Static <var> As <type>

 

Обычно при вызове процедуры происходит передача адреса, по которому находится значение (адрес соответствует имени переменной). Процедура может изменить значение аргумента. Для блокировки изменения значения аргумента следует передача величин значением. Для этого выполняется либо модификация заголовка процедуры, либо передача аргументов в виде формулы.

Для модификации заголовка процедуры выполняется указание ключевого слова By Val перед именами аргументов, значение которых не изменится внутри процедуры.

Пример 19.19.

 

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

Пример 19.20.

 

Текст программы Комментарий
Sub Proc_A ()   Dim Sq as Single Dim LL as Single Dim HH as Single LL=12 HH=23 SquarPr L:=(LL); H:=(HH); S:=Sq   End Sub Вызывающая процедура Объявление переменных ПЛОЩАДЬ ДЛИНА ВЫСОТА Присвоение значений переменным   Преобразование аргумента в формулу Конец процедуры

Встроенные функции VBA

 

Встроенные функции VBA обеспечивают сложные виды обработки данных, избавляя пользователя от разработки собственных программ. Функции имеют аргументы, в качестве которых используются переменные, константы, выражения. Как правило, встроенные функции VBA (табл. 19.6) возвращают отдельные значения (не массивы).

Некоторые встроенные функции VBA имеют два варианта реализации, в одном случае возвращается значение типа Variant, в другом – типа String. Предпочтительнее использовать строковый тип данных (String), если:

в большой программе используется много переменных;

программа детально структурирована;

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

Некоторые встроенные функции VBA возвращают значение в виде строки символов, если к имени функции добавлен символ – $. Следующие встроенные функции имеют одинаковые формат и правила применения, что и без символа $:

 

 

Таблица 19.6. Категории встроенных функций VBA

 

Категории встроенных функций Примеры функций
Математические ABS() – абсолютное значение числа; RND() – случайное число; INT() – выделение целой части числа; тригонометрические функции и др.
Строковые LCASE() – преобразование в строчные буквы строки символов; UCASE() – преобразование в прописные буквы строки символов; LEFT() – выделение подстроки слева; RIGHT() – выделение подстроки справа; LEN() – определение длины строки и др.
Даты и времени DATE() – возврат текущей системной даты; CDATE() – конвертирование выражения в формат дата/время; ТIМЕ() – возврат текущего системного времени; NOW() – возврат текущей даты и текущего времени (по компьютеру); DAY() – возврат номера дня года; MONTH() – возврат номера месяца года; WEEKDAY() – возврат номера дня недели; YEAR() – возврат номера года и др.
Преобразования типов данных СINТ() – преобразование действительного числа в целое (с округлением); CSTR() – преобразование числа в строку символов; CVAR() – преобразование в тип данных VARIANT; FORMAT() – форматирование данных типа дата, время, число, строка символов для печати или записи в файл; STRCOMP() – сравнение двух строк; VAL() – преобразование строки символов в число и др.
Файловой системы FILEATRR() – возврат атрибутов файла; FILEDATETIME() – определяет дату и время создания (модификации) файла; FILELEN() – определяет длину файла в байтах; FREEFILE() – определяет следующий свободный номер для работы с файлом и др.  

Функции пользователя

 

На языке VBA можно создавать функции пользователя, которые, в отличие от процедуры, возвращают вычисленное значение (одно); оно может участвовать в выражениях оператора присваивания.

Заголовок функции пользователя имеет вид:

 

Внимание! Для функции указывается тип возвращаемой величины – As <type>. В теле функции используется оператор присваивания вычисленного значения имени функции.

Пример 19.21.Использование пользовательской функции вычисления площади прямоугольника

 

Текст программы Комментарий
Sub Proc_A ()   Dim S as Single Dim LL as Single Dim HH as Single LL=12 HH=23 S=Sq(LL;H)/2+1200   End Sub Function Sq (H As Single; L As Single As Single) Sq=H*L   End Function Вызывающая процедура Объявление переменных ПЛОЩАДЬ ДЛИНА ВЫСОТА Присвоение значений переменным   Формула вызова функции Sq   Конец процедуры Объявление функции Sqс аргументами Присвоение функции Sqрезультата вычисления Конец функции

Управляющие структуры

 

VBA относится к категории языков структурного программирования и позволяет использовать стандартные управляющие структуры, к которым относятся: условный оператор, альтернативная выборка, циклы.

Условный оператор If.Оператор может использоваться в двух нотациях: в виде простой и блочной структур.

Оператор простой структуры имеет следующий формат записи:

 

If <выражение> Then <оператор>

 

Данный оператор обеспечивает проверку выражения (условия). Если условие истинно (True), выполняется простой или составной оператор, следующий за словом Then;если условие ложно (False), управление передается следующему за If оператору.

Составной оператор – последовательность операторов одной строки, разделенных знаком : (двоеточие).

При построении выражения с помощью операторов логического сравнения следует обеспечить однотипность сравниваемых величин.

Пример 19.22.

If MaxPrice > 23,000.00$ Then MaxPrice=23,500.00$

If Student_Card(100).FullName Like "Пе*" Then number=Student_Card(100).Group

 

При построении выражений используют специальные функции логических проверок VBA.

Логические выражения могут быть построены с помощью стандартных логических функций:

 

Функция Описание Функция Описание
Not And Or Инверсия или отрицание Логическое "И" Логическое "ИЛИ" Хоr Imp Eqv Исключающее "Или" Импликация Эквивалентность

 

 

Последовательно выполняется проверка истинности выражений. Если выражение 1 истинно, выполняется блок операторов 1, иначе выполняется проверка истинности выражения 2и т.д.

Если ни одно из выражений не соответствует требованиям истинности, выполняется блок операторов Else,если оно имеется, иначе – оператор, следующий за End If.

 

Пример 19.23.Организация проверки условия блочной структурой оператора If

 

Текст программы Комментарий
If AvgPrice > 12000 Then DiffPrice=Full(234, 45600) Проверка условия 1 Если условие 1 истинно, вызов процедуры
ElseIf AvgPrice > 24000 Then DiffPrice=Full( 12000, 45000) ElseIf AvgPrice > 36000 Then DiffPrice=Full(24000, 50000) Else DiffPrice=Full(36000, 70000) End If Проверка условия 2 Если условие 2 истинно, вызов процедуры Проверка условия 3 Если условие 3 истинно, вызов процедуры Если условия 1 – 3 не выполняются, вызов процедуры Конец блока If

Оператор выборки Select Case.Данный оператор применяется в том случае, если во всех логических условиях участвует одна и та же величина (переменная):

 

Выражение для сравнения может быть записано в виде: Case 45 или Case 3, 4, 5, или Case 5 То 12.

Если ни одно из сравнений не является истинным, выполняется блок операторов Else,если блок Elseотсутствует, управление передается оператору, следующему за End Case.

 

Пример 19.24.Организация последовательной проверки значения переменной

 

Текст программы Комментарий
Select CDemse Начало работы оператора Select, объявление имени переменной, для которой выполняются последующие проверки – Demse
CaseDemse21 Первое сравнение
Dem=21 Если первое сравнение истинно, выполняется оператор присваивания
Case Demse 22; 25; 28 Второе сравнение – указан список возможных значений
Dem=31 Если второе сравнение истинно, выполняется оператор присваивания
Case Demse 45 To 48 Третье сравнение, переменная Cdemse может принимать значения от 45 до 48
Dem=41 Если третье сравнение истинно, выполняется оператор присваивания
Case Else Если не выполнилось ни одно из указанных сравнений
Dem=51 Выполняется присваивание
End Case Конец оператора Select

Оператор цикла For-Next.Данный оператор относится к категории вычисляемых циклов, когда известно заранее число повторений цикла, заданы начальное, конечное значения и шаг (приращение) изменения начального значения, т.е.:

 

 

Для каждого значения переменной этого цикла выполняется блок операторов, расположенных до ключевого слова Next.Затем происходит изменение переменной цикла (увеличение значения на шаг), проверяется полученное значение (не более указанного конечного значения) и повторяется выполнение блока операторов.

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

В теле цикла может присутствовать оператор Exit For.При выполнении этого оператора прекращается цикл и управление также передается оператору, следующему за фразой Next. Цикл For-Nextможет быть вложенным.

Пример 19.25.Организация циклов с использованием счетчика повторений

 

Текст программы Комментарий
Sub stickRandom() Dim numrows As Integer; numcols As Integer Dim therow As Integer; thecol As Integer numrows = Selection.Rows.Count numcols = Selection.Columns.Count   Debug. Print numrows; numcols   Randomize Debug.Print Rnd For therow = 1 To numrows For thecol = 1 To numcols Selection. Cells(therow; thecol).Value = Rnd   Next thecol Next therow End Sub Объявление имени процедуры Объявление переменных   Определение числа строк в выделенном блоке ячеек Определение числа столбцов в выделенном блоке ячеек Печать числа строк и столбцов в выделенном блоке ячеек Генератор случайных чисел Печать случайного числа Внешний цикл по числу строк в блоке ячеек Внутренний цикл по числу столбцов в блоке ячеек Присваивание текущей ячейке случайного числа Selection – выбор ячейки Cells – метод доступа к ячейке с определенными координатами Value – свойство "значение" Конец внутренного цикла Конец внешнего цикла Конец процедуры

Цикл Do-Loop.Логически управляемый цикл, оператор Do – начало, оператор Loop– конец цикла; имеет 4 модификации:

1) условие True в начале цикла

 

Do While <условие>

<блок операторов>

Exit Do

<блок операторов>

Loop

 

Цикл выполняется до тех пор, пока истинно <условие>. Минимальное число повторений тела цикла – 0. Оператор Exit Doпредназначен для прекращения цикла и передачи управления оператору Loop– конец цикла.

2) условие True в конце цикла

 

Do

<блок операторов>

Exit Do

<блок операторов>

Loop While <условие>

Цикл выполняется хотя бы один раз, в конце выполняется проверка <условия>.

3) условие False в начале цикла

 

Do Until <условие>

<блок операторов>

Exit Do

<блок операторов>

Loop

Untilуказывает, что цикл выполняется до тех пор, пока <условие> не станет истинным. Минимальное число повторений тела цикла – 0.

4) условие False в конце цикла

 

Do

<блок операторов>

Exit Do

<блок операторов>

Loop Until <условие>

 

Условие проверяется в конце, цикл прекращается, когда условие станет истинным. Минимальное число повторений тела цикла – 1.

Пример 19.26.Выполнение логически прерываемых циклов

 

Текст программы Комментарий
Option Explicit   Sub Do_Rnd() Dim a As Single Dim i As Integer, Randomize Do While True   a=Rnd Обязательность объявления всех переменных перед их использованием Объявление имени процедуры без параметров Объявление переменных   Вызов генератора случайных чисел Начало цикла Do. Задание условия выполнения цикла – цикл бесконечный Присвоение переменной случайного числа
Debug.Print a If a > 0.99 Then Exit Do Loop End Sub Печать случайного числа Блок условия – при его выполнении выход из цикла Конец цикла Конец процедуры
     

Цикл While-Wend.Данный оператор полностью соответствует структуре Do While-Loop.Отличительной особенностью оператора является невозможность прервать выполнение цикла из тела цикла (Exit Doотсутствует), проверка условия выполняется только в начале цикла.

 

While <условие>

<блок операторов>

Wend

Цикл For Each.Оператор относится к категории операторов объектного типа, т.е. применяется к массивам (элементам) и наборам объектов. Выполняется фиксированное число раз, число объектов в наборе определяется автоматически. Упорядочение элементов набора – произвольное.

 

For Each <элемент> In <набор>

<блок операторов>

Exit For

<блок операторов>

 

где <элемент> представляет собой переменную типа Variant, <набор> – определенный набор объектов. Для прерывания цикла используется оператор Exit For.

РАБОТА С ФАЙЛАМИ

Основные понятия

 

VBA работает с хранимыми на диске файлами двух типов: последовательного и произвольного доступа.

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

Файл произвольного доступа имеет записи фиксированной длины: можно одновременно выполнять чтение и запись в файл записей.

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

 

Открывать можно как существующие на диске, так и новые файлы. Каждый файл идентифицируется в программе определенным номером, который присваивается ему в момент открытия. Свободный номер файла можно определить с помощью встроенной функции FileFree, которая возвращает очередной свободный номер для открытия файла (номер изменяется в диапазоне 1-511).

Файл открывают в определенном режиме работы:

Open <путь_имя_файла> [For <режимы>] [Access <направление_потока>]

[<блокировка>] As [#]номер [Lеn=<длина_записи>]

 

где <путь_имя_файла> - строка символов, задающая местоположение и имя дискового файла;

<режимы> - режимы работы с файлом:

Append добавление записей

Binary двоичный файл

Input файл для чтения

Output файл для записи

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

<направление_потока> - задает тип потока данных по отношению к файлу:

Read только чтение

Write только запись

Read Write чтение и запись одновременно;

<блокировка> - определяет возможность работы с файлом других приложений:

Shared распределенный доступ

Lock Read блокировка файла для чтения

Lock Write блокировка файла для записи

Lock Read Write блокировка файла для чтения и записи;

номер - условный идентификатор файла;

<длина_записи> - указывается для записей фиксированной длины, максимум – 32767

байт. Оптимальная длина записи кратна размеру дискового сектора (512

байт).

 

Для файлов произвольного доступа объявляется структура записи с помощью оператора Туре;указываются типы и длина компонентов структуры. В режимах Binary, Input, Random под разными номерами можно открыть один и тот же файл, не закрывая ранее открытых; в режимах Append, Output требуется предварительно закрыть ранее открытые файлы.

Пример 19.27. Открытие файлов

 

Текст программы Комментарий
Open "FILE" For Input As #1 Open "FILE" For Binary Access Write As #1 Type Record Define userdefined type ID As Integer Name As String * 20 End Type Dim MyRecord As Record Open "FILE" For Random As #1 Len = Len(MyRecord)   Open "FILE" For Output Shared As #1     Open "FILE" For Binary Access Read Lock Read As #1 Открытие последовательного файла для чтения Открытие двоичного файла только для записи   Объявление пользовательского типа данных     Открытие файла произвольного доступа. Длина записи файла определяется встроенной функцией Len Открытие последовательного файла с распределенным доступом (любые приложения могут читать и писать в файл) Открытие двоичного файла для чтения, чтение файла другим приложениям запрещено

Закрытие файла

 

После завершения работы с файлом его закрывают с помощью оператора:

 

Close [<список_номеров_файлов>]

 

Если номер закрываемого файла не указан, закрываются все открытые файлы.

Пример 19.28.Закрытие файлов

Close #1; #2; #4 ' закрытие файлов, ранее открытых под номерами 1,2,4

Close ' закрытие всех открытых файлов

Запись информации в файл

 

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

1. Печать в последовательный файл

Данный оператор обеспечивает запись форматированного вывода в последовательный файл текстового типа – по аналогии с функцией печати:

 

Print #номер_файла; [<выходной_список_переменных>]

 

Выходной список печати может содержать:

 

[{Spc(n) | Tab[(n)]}] [<выражение>] [charpos]

 

где Spc(n) - длина пустой строки;

Tab(n) - печать с указанной позиции;

<выражение> - выражение числового или символьного типа;

charpos - определяет позицию вставки для следующего символа. Символ ; обеспечивает

переход на другую строку (к другой записи файла).

 

Если последовательный файл должен затем считываться, не рекомендуется применять оператор Print.

Пример 19.29.Печать в последовательный файл

 

Текст программы Комментарий
Open "FILE" For Output As #1 Print # 1 ; "Печать любого текста" Print #1; Print #1; "Код"; Tab ; "Наименование" Print #1; "Код" ; " " ; "Наименование" Print #l;Spc(5); "Код" Print #l;Tab(10); "Код" MyBool = False   MyDate = #February 12, 1969# MyNull = Null MyError = CVErr(32767) Print #1; MyBool; Print # 1; MyDate; " это дата " Print # 1 ; MyNull; " это пустое значение" Print #1 ; My Error; " код ошибки" Close #1 Открытие файла для печати Вывод в файл текстовой строки Вставка пустой строки Вывод в две колонки Разделение двух слов пробелом Вставка 5 отступов перед печатью слова Позиционирование в колонку 10 Присвоение значений переменным различного типа   Печать значения переменной в файл   Закрытие файла

 

2. Запись в последовательный файл

В последовательный файл запись информации выполняется командой:

Write#номер_файла; [<выходной_список_переменных>]

 

Для данных числового типа используется символ точка для десятичной точки. В отличие от оператора Printпри записи в файл автоматически вставляются специальные символы-разделители:

запятая – между элементами;

двойные кавычки – вокруг символьных данных.

В запись файла вставляется символ возврата каретки (переход на новую строку – запись файла).

Пример 19.30.Запись информации в последовательный файл

 

 

3. Вывод данных в файл произвольного доступа

Вывод данных выполняется оператором:

 

Put [#номер_файла; [#записи],<переменная>

 

где #записи - номер записи для файла произвольного доступа либо номер байта, с которого начинается запись, для двоичного файла. Если номер не указан, используется следующий за последним использованным в операторах Get, Put, Seek.

Пример 19.31.Запись в файл произвольного доступа

 

Текст программы Комментарий
Type Record   ID As Integer Name As String * 20 End Type Dim MyRecord As Record   Open "TESTFILE" For Random As #1 Len = Len(MyRecord)   For RecordNumber = 1 To 5 MyRecord.ID = RecordNumber MyRecord.Name = "Запись номер -" & RecordNumber Put #1, RecordNumber, MyRecord Next RecordNumber Close #1 Объявление пользовательского типа данных для записи   Объявление переменной на основе пользовательского типа данных Открытие файла произвольного доступа с длиной, соответствующей длине объявленного типа Организация цикла для записи в файл Формирование содержимого записи     Непосредственная запись в файл Конец цикла Закрытие файла

Ввод информации из файла

 

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

Чтение выполняется оператором:

 

Input #номер_файла; <список_переменных>

 

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

Пример 19.32.Запись в файл произвольного доступа

 

Текст программы Комментарий
Open "FILE" For Input As #1 Do While Not EOF(l) Input # 1 ; MyString; MyNumber Debug.Print MyString; MyNumber Loop Close #1 Открытие файла Цикл до конца файла Чтение данных записи в переменные Печать считанных данных Конец цикла Закрытие файла

 

Другим оператором чтения из последовательного файла является

 

Line Input #номер_файла; <переменная>

 

Оператор обеспечивает посимвольное считывание данных строки по файлу до обнаружения символа "возврат каретки" (Chr(13)) и присвоение этих данных указанной переменной символьного типа.

Пример 19.33.Построчное чтение из файла последовательного доступа

 

Текст программы Комментарий
Open "TESTFILE" For Input As #1 Do While Not EOF(l) Line Input #1, TextLine Debug.Print TextLine Loop Close #1 Открытие файла Цикл, пока не достигнут конец файла Чтение строки в переменную Печать в окне Debug Конец цикла Закрытие файла

 

2. Чтение данных из файла произвольного доступа

Данный оператор обеспечивает считывание записи файла произвольного доступа в указанную переменную:

 

Get Put [#номер_файла; [#записи],<переменная>

Пример 19.34.Чтение из файла произвольного доступа