0

我的要求是——我需要给用户两个选项(是或否)。因此,每当用户输入YN以外的内容时,系统都会抛出错误。我创建了下面的代码,但它没有给出预期的输出。

$ 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
  • 输出是:

每当我尝试给出整数值时,它就会按照我的设计运行。但是当我尝试输入除YN之外的 A、B、C 等时,它会给出以下警告。

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\

对此有什么建议吗??

4

1 回答 1

0

嗯,在我看来,您只需要取消引用您的字符串比较变量并引用固定的字符串值:

坏:如果'选项'.NES。Y 好:如果 OPTION .NES。“是”

有些人喜欢 goof: if "''OPTION'" .NES。“是”!这将在使用 SET VERIFY 运行时显示 OPTION 的值

免费咨询...

1)在验证之前切勿分配值: - DEFINE/NOLOG Report_file 'OPTION' ---> 验证后移至脚本底部 ---> 如果您想在 OPTION 答案中接受空格(不是这样)

2) 对用户好一点——考虑使用 F$EXTRACT 来获取 OPTION 的第一个字符,也允许“Yes”(和“Yeah!”)——在比较之前使用 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'
于 2017-09-12T16:14:04.383 回答