Во-первых, наличие файла на диске необязательно говорит о том, что файл доступен для записи. Поэтому более корректная проверка:
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>
Обработка прерываний
re:Обработка прерываний
Насколько я знаю, в PROGRESS нет блочной обработки ошибок, ошибки могут обрабатываться для каждого отдельного оператора, снабженного NO-ERROR.
При возникновении неуправляемой ошибки, при включенном условии ON ERROR, можно произвести действия по управлению ошибкой, но ошибочное сообщение все равно будет выведено на экран, но можно сделать следующий трюк, чтобы его подавить:
В общем это то, что требовалось
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>
При возникновении неуправляемой ошибки, при включенном условии ON ERROR, можно произвести действия по управлению ошибкой, но ошибочное сообщение все равно будет выведено на экран, но можно сделать следующий трюк, чтобы его подавить:
В общем это то, что требовалось
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>
re:Обработка прерываний
Спасибо! это то что нужно.