【发布时间】:2017-10-16 17:49:00
【问题描述】:
目前我正在编写一个 rexx 程序,我需要在其中屏蔽密码输入。我使用此代码来显示我的面板:
address ispexec"libdef ispplib dataset id('my.pds')
address ispexec 'display panel(member)'
这很好用,并将密码返回给一个变量,我在其中执行各种检查。
之后我继续我的 rexx 程序。发生的下一个功能是使用 Rexx 的“say”“pull”方法接收用户的输入。这就是发生奇怪错误的地方。
我必须再次检查用户输入,如果它无效,它会循环回“拉”。然而,在返回“拉”而不是允许用户输入数据时,程序得到数据符号“***”的底部。这当然会导致无限循环,然后用户无法输入数据。
我相信原因是显示面板,然后使用 clrscrn。因为我可以取出 clrscrn,它工作正常,但数据在其他页面上被截断。或者我可以通过不显示 ispf 面板来牺牲屏蔽用户密码并且它可以工作。但一起失败。
我想知道发生了什么以及可能的解决方法。
显示面板后我用来复制错误的 Rexx 代码:
do while chk <> 'N'
clrscrn
do i = 1 to 5
say '-test'
end
pull chk
end
用户输入“ ”的结果一
-test
-test
-test
-test
-test
' ' <---- User inputs space, invalid entry, has to be 'N'
*** <-- for some reason hits bottom of data
然后循环返回,结果为:
-test
-test
-test
-test
-test
*** <---- automatically hits bottom of data
重申一下,如果我取出 clrscrn,则永远不会出现数据底部。但错误太多次,数据截断到另一页。
重新输入 clrscrn,不要显示 ispf 面板。代码完美运行,永远不会出现数据底部。
面板代码:
)PANEL
)ATTR
~ TYPE(INPUT) INTENS(NON) Pad(_)
! TYPE(TEXT) COLOR(RED) SKIP(ON)
)BODY WINDOW(80,24)
! CREATE YOUR PIN NUM
!--------------------------------------------
!
! ENTER YOUR PIN:~INP !
! CONFIRM PIN...:~INPT!
!
! MUST BE 4-DIGITS
)END
在类似情况之前我也调用了另一个小组:
)PANEL
)ATTR
~ TYPE(INPUT) INTENS(NON) Pad(_)
! TYPE(TEXT) COLOR(RED) SKIP(ON)
)BODY
! VERIFY YOUR IDENTITY
!--------------------------------------------
!
! ENTER YOUR PIN: ~Z !
)INIT
&ZEDSMSG = ''
&ZEDLMSG = ''
.ZVARS = '( INP )'
.ATTR(INP) = '&ATTRPIN'
)PROC
&RESP = .RESP
)END
【问题讨论】:
-
stackoverflow.com/questions/18084599/…我用这个问题来屏蔽密码
-
使用
ISPF panels进行数据输入!!!不要使用说/拉!!!!。它对用户来说更简单、更容易+您可以使用交换命令 etcf -
我绝对同意,但是,我已经写了很多代码。因为我在很多地方只需要单个输入。是否已经解决了这个问题,或者一旦你做了面板显示,这总是会发生?
-
密码屏蔽是最后的补充
-
布鲁斯,你能不能至少给我一个关于为什么这不起作用的建议。正如我从周一开始自学 rexx 一样,从今天开始,ispf 面板对我来说是新的。