Нужно указать вариант Y или N в сценариях DCL

Мое требование - мне нужно дать два варианта (да или нет) пользователям. Таким образом, всякий раз, когда пользователь вводит значение, отличное от Y или N, система должна выдавать ошибку. Я создал приведенный ниже фрагмент кода, но он не дает ожидаемого результата.

$ Y:== y
$ N:== n
$ ALPHA:
$ INQUIRE OPTION "Y or N"
$ DEFINE/NOLOG Report_file 'OPTION'
$       if f$type (OPTION) .eqs. "INTEGER"
$       then
$                   esc[0,7] = 27
$                   text = "Numeric values not accepted !!"
$                   write sys$output   "''esc'[5m''text'''esc'[m"
$               wait 0:0:0.15
$               set term/width=132
$               goto ALPHA
$       endif
$ if 'OPTION' .NES. Y 
$ then
$                 esc[0,7] = 27
$                 text = "Enter "Y" or "N""
$                 write sys$output   "''esc'[5m''text'''esc'[m"
$ endif
$ if 'OPTION' .NES. N
$ then
$                  esc[0,7] = 27
$                  text = "Enter "Y" or "N""
$                  write sys$output   "''esc'[5m''text'''esc'[m"
$ endif
  • Выход:

Всякий раз, когда я пытаюсь дать промежуточные значения, он запускается так, как я задумал. Но когда я пытаюсь ввести A,B,C и т. Д., Кроме Y или N, тогда выдается следующее предупреждение.

Aksh - $-> @test.com
Y or N: k
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\

Есть предложения по этому вопросу?

1 ответ

Решение

Хммм, мне кажется, вам просто нужно снять кавычки в вашей переменной сравнения строк и заключить в кавычки фиксированные строковые значения:

плохо: если "ВАРИАНТ". У хорошего: если ВАРИАНТ. "Y"

Некоторым людям нравится дурак: if "''OPTION'" .NES. "Y"! Это покажет значение для OPTION при запуске с SET VERIFY

Бесплатный совет...

1) Никогда не назначайте значения перед проверкой: - DEFINE/NOLOG Report_file 'OPTION' ---> переместиться в конец скрипта после проверки ---> использовать "'' OPTION '", если вы когда-либо хотите принять пробелы в ответе OPTION (не тот случай)

2) Будьте немного приятнее с пользователями - подумайте об использовании F$EXTRACT, чтобы просто получить первый символ OPTION, чтобы также разрешать "Да" (и "Да!") - используйте F$EDIT для UPPERCASE перед сравнением. - рассмотреть возможность использования F$LOC, чтобы найти OPTION в списке допустимых значений, таких как "YyNn"

Попробуй это:

$ Y:== y
$ N:== n
$ esc[0,7] = 27
$ALPHA:
$ INQUIRE OPTION "Y or N"
$ if OPTION .NES. Y .and. OPTION .NES. N
$ then
$     text =  "Enter ""Y"" or ""N"""
$     write sys$output   esc + "[5m" + text + esc + "[m"
$     goto ALPHA
$ endif
$ DEFINE/NOLOG Report_file 'OPTION'
Другие вопросы по тегам