Another 2 cents here. If not using a global input routine, I usually use
this syntax:
LOOP
prompt, position cursor, whatever
INPUT ANS
ANS = UPCASE(ANS) or ANS = OCONV(ANS, 'MCU') if you don't have
UPCASE
UNTIL ANS MATCHES 'Y]N' DO ] is an actual value mark
error message
REPEAT
Most programmers forget to upcase the input, which frustrates users who just
popped back into your application window from Word, Excel or some other
Windows program. What a simple thing to do to makes users really happy.
Like it, don't like it, it's all the same to me. This thread has certainly
shown that there are many ways to skin a cat, but no matter which one you
pick, the cat's not going to like it very much. ;-)
Best regards and "Hi" to some very familiar names I haven't corresponded
with in a long time,
Charlie Noah
Inland Truck Parts Company
On 3/6/2009 12:02 AM, MAJ Programming wrote:
No offense but the FOR...NEXT example for this thread is fools folly. Not
because it is wrong. It over complicates the original premise (that was
deviated from the original thread.
The deviation became ways to validate Y or N. Fair enough and the LOOP
examples all participate in a validation pausing until Y or N is entered.
But just because the expression can be written in another way, doesn't mean
that it's a comparable replacement. In this case, IMHO, it is very
distracting.
FOR...NEXT sequences automatically imply some form of incrementing through
something. Assumption? Yes. But it's 99.44% used for incrementing and not
stalling as in your example.
Thus, the next programmer who has to read this will be mentally following
the code, processing the logic flow and when they see the validation area,
they will have to look twice and see why a FOR...NEXT loop is used for
validation.
Sure, there are many valid ways to skin each cat. But this one is a poor
example of validating a Y/N answer.
My 2 cents,
Mark Johnson
PS. The INDEX("YN",ANS,1) has a slight problem as it allows the <enter>
alone answer to pass as a valid answer. I use this all the time when I
prompt "IS THIS OKAY (Y/N/<Enter>=Y) ":;INPUT ANS. But for a pure Y or N,
the null value passes.
----- Original Message -----
From: "Jacques G." <[email protected]>
To: <[email protected]>
Sent: Monday, March 02, 2009 8:46 PM
Subject: Re: [U2] DO/WHILE vs IF THEN
The case can be tested also if n/y are acceptable:
LOOP PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS,1
UNTIL INDEX('NY',UPCASE(ANS),1) REPEAT
*-- P.AM will contain a boolean value 0 for N, 1 for Y --*
FOR X = 1 TO (X+1)
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS,1
FIND UPCASE(ANS) IN "N":@AM:"Y" SETTING P.AM THEN P.AM -= 1 ; EXIT
NEXT X
----- Original Message ----
From: Keith Johnson [DATACOM] <[email protected]>
To: [email protected]
Sent: Monday, March 2, 2009 7:38:16 PM
Subject: Re: [U2] DO/WHILE vs IF THEN
Mark Johnson suggested the following change
<Before>
GOOD.ANS=FALSE
LOOP UNTIL GOOD.ANS DO
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
IF ANS="Y" OR ANS="N" THEN GOOD.ANS=TRUE REPEAT
<after>
LOOP WHILE TRUE DO
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
IF ANS="Y" OR ANS="N" THEN EXIT
REPEAT
These forms all work (Universe 10.2.0) and are progressively shorter
than the above
LOOP
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
IF ANS="Y" OR ANS="N" THEN EXIT
REPEAT
LOOP
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
UNTIL ANS="Y" OR ANS="N" DO
REPEAT
LOOP
PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
UNTIL ANS="Y" OR ANS="N" REPEAT
LOOP PRINT "ENTER 'Y' OR 'N' ":;INPUT ANS
UNTIL ANS="Y" OR ANS="N" REPEAT
Ray Wurlod was a great proponent of the LOOP WHILE READNEXT ID format.
I believe it may not compile on some MV systems.
Regards, Keith
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/