需要在 DCL 脚本中给出选项 Y 或 N
Need to give option Y or N in DCL scripting
我的要求是 -- 我需要给用户两个选项(是或否)。因此,每当用户输入 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
- 输出为:
每当我尝试给出整数值时,它就是我设计的 运行..
但是当我尝试输入 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\
对此有什么建议吗??
嗯,在我看来你只需要取消引用你的字符串比较变量并引用固定的字符串值:
不好:如果 'OPTION' .NES。是
好:如果 OPTION .NES。 "Y"
有些人喜欢
愚蠢:如果“''OPTION'”.NES。 "Y"!这将在 运行 和 SET VERIFY
时显示 OPTION 的值
免费咨询...
1) 永远不要在验证之前赋值:
- DEFINE/NOLOG Report_file 'OPTION'
---> 验证后移至脚本底部
---> 如果您想在选项答案中接受空格,请使用“''OPTION'”(不是这种情况)
2) 对用户好一点
- 考虑使用 F$EXTRACT 只获取 OPTION 的第一个字符也允许 "Yes"(和 "Yeah!")
- 在比较之前使用 F$EDIT 到 UPPERCASE。
- 考虑使用 F$LOC 在可接受值列表中查找选项,例如 "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'
我的要求是 -- 我需要给用户两个选项(是或否)。因此,每当用户输入 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
- 输出为:
每当我尝试给出整数值时,它就是我设计的 运行.. 但是当我尝试输入 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\
对此有什么建议吗??
嗯,在我看来你只需要取消引用你的字符串比较变量并引用固定的字符串值:
不好:如果 'OPTION' .NES。是 好:如果 OPTION .NES。 "Y"
有些人喜欢 愚蠢:如果“''OPTION'”.NES。 "Y"!这将在 运行 和 SET VERIFY
时显示 OPTION 的值免费咨询...
1) 永远不要在验证之前赋值: - DEFINE/NOLOG Report_file 'OPTION' ---> 验证后移至脚本底部 ---> 如果您想在选项答案中接受空格,请使用“''OPTION'”(不是这种情况)
2) 对用户好一点 - 考虑使用 F$EXTRACT 只获取 OPTION 的第一个字符也允许 "Yes"(和 "Yeah!") - 在比较之前使用 F$EDIT 到 UPPERCASE。 - 考虑使用 F$LOC 在可接受值列表中查找选项,例如 "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'