Нужно указать вариант 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'