Обработка прерываний

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
new
Старожил
Сообщения: 32
Зарегистрирован: 28 мар 2002, 03:00

Сообщение new » 18 апр 2002, 09:22


Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва

re:Обработка прерываний

Сообщение dmi » 18 апр 2002, 10:37


Аватара пользователя
svr
Старожил
Сообщения: 68
Зарегистрирован: 13 июл 2001, 03:00

re:Обработка прерываний

Сообщение svr » 18 апр 2002, 11:57


Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва

re:Обработка прерываний

Сообщение dmi » 18 апр 2002, 12:51


new
Старожил
Сообщения: 32
Зарегистрирован: 28 мар 2002, 03:00

re:Обработка прерываний

Сообщение new » 18 апр 2002, 13:42


bulklodd
Старожил
Сообщения: 448
Зарегистрирован: 27 июл 2001, 03:00
Откуда: Москва

re:Обработка прерываний

Сообщение bulklodd » 25 апр 2002, 12:19

Во-первых, наличие файла на диске необязательно говорит о том, что файл доступен для записи. Поэтому более корректная проверка:
FILE-INFO:FILE-NAME = [filename].
IF INDEX(FILE-INFO:FILE-TYPE,"W") > 0 THEN
DO:
OUTPUT TO VALUE(FILE-INFO:FULL-PATHNAME).
[output]
OUTPUT CLOSE.
END.
Во-вторых, можно поподробнее о "операторах, не снабжённых NO-ERROR". Какие именно операторы вызывают проблемы в обработке исключительных ситуаций?

<font size=-1>[ Это Сообщение было отредактировано: bulklodd в 2002-04-25 16:51 ]</font>

new
Старожил
Сообщения: 32
Зарегистрирован: 28 мар 2002, 03:00

re:Обработка прерываний

Сообщение new » 27 апр 2002, 10:07


bulklodd
Старожил
Сообщения: 448
Зарегистрирован: 27 июл 2001, 03:00
Откуда: Москва

re:Обработка прерываний

Сообщение bulklodd » 30 апр 2002, 10:59

Насколько я знаю, в PROGRESS нет блочной обработки ошибок, ошибки могут обрабатываться для каждого отдельного оператора, снабженного NO-ERROR.
При возникновении неуправляемой ошибки, при включенном условии ON ERROR, можно произвести действия по управлению ошибкой, но ошибочное сообщение все равно будет выведено на экран, но можно сделать следующий трюк, чтобы его подавить:
В общем это то, что требовалось :smile:

DEFINE VARIABLE a AS CHARACTER INIT "xxx" NO-UNDO.
DEFINE VARIABLE l AS LOGICAL NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

OUTPUT TO "nul".
TR:
DO TRANSACTION ON ERROR UNDO TR,LEAVE TR
ON STOP UNDO TR,LEAVE TR:
i = INT(a). /*ERROR!!!*/
l = YES.
END. /* End of TR BLOCK */
OUTPUT CLOSE.
/* l = NO */
MESSAGE l
VIEW-AS ALERT-BOX INFO BUTTONS OK.
IF NOT l THEN
/* ERROR HANDLING*/
ELSE
/* NORMAL PROCESSING */

<font size=-1>[ Это Сообщение было отредактировано: bulklodd в 2002-04-30 15:02 ]</font>

<font size=-1>[ Это Сообщение было отредактировано: bulklodd в 2002-04-30 15:03 ]</font>

new
Старожил
Сообщения: 32
Зарегистрирован: 28 мар 2002, 03:00

re:Обработка прерываний

Сообщение new » 30 апр 2002, 13:50

Спасибо! это то что нужно.