Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS_VB_dop_vozm_5_04.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
1.64 Mб
Скачать
      1. Нетипизированные файлы

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

Для открытия файла записей необходимо использовать оператор Open, формат которого выглядит так:

Open путь [For Random] As номер Len = размер

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

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

Для занесения записей в файл используется оператор Put, формат которого следующий:

Put номер, позиция, переменная.

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

По аналогии для извлечения определенной записи из файла в переменную соответствующего типа применяется оператор Get:

Get номер, позиция, переменная

Здесь также как и в операторе Put под позицией понимается порядковый номер записи в нетипизированном файле.

Пример 1.3. Создать файл записей a.dat, записать в него 2 одинаковые записи типа Session при помощи переменной rec1. После этого нужно извлечь вторую запись из файла в переменную rec2, изменить в ней значения полей Name, Number и Progr. Отредактированную запись следует вновь занести в файл a.dat с порядковым номером 2. После всех выполненных действий необходимо закрыть файл a.dat.

объявление нового типа

Private Type Session

Name as String * 30

Number As Long

Physics As Byte

Math As Byte

Progr As Byte

End Type

Option Explicit

Private Sub Form_Load()

Dim rec1 As Session

Dim rec2 As Session

Dim Fnum As Integer

Dim Nrec As Integer

Dim Fpath As String

заполнение преременной rec1

With rec1

.Name = “Иванов Иван Иванович”

.Number = 123456

.Physics = 4

.Math = 5

.Progr = 3

End With

Fpath = “a.dat”

Fnum=FreeFile

функция Len служит для определения длины записи

Nrec = Len(rec1)

открытие файла a.txt

Open Fpath For Random As Fnum Len = Nrec

занесение двух одинаковых записей

Put Fnum, 1, rec1

Put Fnum, 2, rec1

извлечение второй записи в переменную rec2

Get Fnum, 2, rec2

редактирование rec2

With rec2

.Name=“Петров Петр Петрович”

.Number=11111

.Progr=5

End With

занесение измененной записи в файл

put Fnum, 2, rec2

Close Fnum

End Sub

    1. Обработка ошибок

      1. Оператор On Error

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

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

Одно из наиболее удобных средств отслеживания ошибок – это оператор On Error. Этот оператор позволяет в случае возникновения ошибки прервать выполнение программы и передать управление оператору с определенной меткой. Типичная синтаксическая структура обработчика ошибок следующая:

On Error GoTo метка

блок операторов1

метка:

блок операторов2

Здесь:

ON Error GoTo – оператор для перехвата ошибки при выполнении какой-либо операции с последующим переходом на указанную метку;

блок операторов1 – блок операторов, выполняемый в случае отсутствия ошибки в программе;

метка – строковое значение, обозначающее начало программного кода обработки ошибки;

блок операторов2 – блок операторов, выполняемый в случае возникновения ошибки.

Следует отметить, что рассмотренный оператор (On Error GoTo) должен быть расположен в программе (обработчике события) перед вызовом блока операторов, выполнение которого может привести к ошибке. В противном случае возникающая ошибка обрабатываться не будет, и выполнение программы, соответственно, будет аварийно прервано. Последним оператором в блоке операторов1 должен быть выход из процедуры Exit Sub. Это позволяет предотвратить запуск обработчика ошибки в случае нормальной работы программы. Как правило, обработчик ошибок размещается в самом конце программы или обработчика события.

Ниже приводится полный текст программы с использованием встроенных диалоговых окон [4] и обработчика ошибок. Данная программа предлагает ввести число и находит результат деления 100 на это число. Если в качестве числа будет введен ноль, слишком большое число (в данном случае больше 32 767) или вместо числа будет введена строка, то управление в программе перейдет на оператор с меткой NumErr. Здесь пользователю будет выдано соответствующее предупреждение об ошибке, и программа завершится корректно.

'Результат деления

Private Sub Form_Load()

Dim st as string

Dim x As Integer

Dim у As Single

On Error GoTo NumErr

st = InputBox(“Введите целое число“)

x = Val(st)

y=100 / x

MsgBox “Результат деления 100 на “ + Str(x) &_

“ равен ” + Str(y)

Exit Sub

NumErr:

If Err.Number = 11 then

MsgBox “Деление на ноль!”, 16

ElseIf Err.Number = 6 then

MsgBox “Введено слишком большое число!”, 16

Else

MsgBox “Неверные данные!”, 16

End If

End Sub

В данной программе также использовано свойство Number объекта Err, которое позволяет определить тип ошибки. При вводе нуля или, например, строки вместо числа возникает ситуация «деление на ноль». При вводе слишком большого числа происходит переполнение. Значения соответствующих кодов ошибок приведены в таблице раздела 1.2. В приведенном листинге программы при возникновении ошибки выводится соответствующее диагностическое сообщение и выполнение программы немедленно прекращается.

Как видно из приведенного примера оператор On Error и системный объект Err позволяют создать развернутую процедуру обработки ошибок. Для этого необходимо создать одну универсальную процедуру обработки ошибок с определенной меткой. Тогда при любой ошибке в разных местах программы переход будет происходить в одну точку, где и производится обработка ошибки любого вида.

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