我的要求是 - 我需要为用户提供两个选项(是或否)。因此,只要用户输入 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
每当我尝试给出interger值时,它就像我设计的那样运行.. 但是当我尝试输入除 Y 或 N 之外的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\
对此有何建议?
答案 0 :(得分:0)
嗯,在我看来,你只需要取消引用你的字符串比较变量并引用固定的字符串值:
糟糕:如果' OPTION' .NES。 ÿ 好的:如果OPTION .NES。 " Y"
有些人喜欢 傻瓜:如果"'' OPTION'" .NES。 " Y" !这将显示使用SET VERIFY
运行时OPTION的值免费咨询......
1)在验证之前不要分配值: - DEFINE / NOLOG Report_file' OPTION' --->验证后移到脚本底部 --->使用"''选项'"如果你想在OPTION答案中接受空格(不是这种情况)
2)对用户来说更好一点 - 考虑使用F $ EXTRACT来获取OPTION的第一个字符,也允许"是" (和#34;是的!") - 在比较之前使用F $ EDIT进行大写。 - 考虑使用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'