I think what you mean is this:

PERFORM 1050-LOOP THRU 1059-EXIT VARYING JC FROM 1 BY 1 UNTIL JC = 99
END-PERFORM

  1050-LOOP.
    IF FIRST-NAME NOT = "ROBERT"
        GO TO 1059-EXIT
    END-IF
    IF TYPE NOT = 195
        GO TO 1059-EXIT
    END-IF
    IF NOT SO-ON
        GO TO 1059-EXIT
    END-IF
    IF NOT SO-FORTH
        GO TO 1059-EXIT
    END-IF
    PERFORM 1050-SUCH-AND-SUCH END-PERFORM

  1059-EXIT.
      EXIT.

In structured programming, it is perfectly acceptable to use GO TO within a
paragraph. It is NOT acceptable to use GO TO outside of a paragraph.

Joe

On Sat, Jun 6, 2020 at 12:42 AM Bob Bridges <robhbrid...@gmail.com> wrote:

> I realize this is a bit of a change in subject (and it's not as if we need
> yet another one), but I avoid this construction.  My phobia is based on an
> extreme example:  In their zeal never to use GOTOs, I've frequently seen
> programmers write paragraphs like this:
>
>   PERFORM 1050-LOOP VARYING JC FROM 1 BY 1 TO 99
>
>   1050-LOOP.
>     IF X < 1000
>       IF FIRST-NAME NOT = "ROBERT"
>         IF TYPE = 195
>           IF SO-ON
>             IF SO-FORTH
>               EXECUTE 1050-SUCH-AND-SUCH
>               END-IF
>             END-IF
>           END-IF
>         END-IF
>       END-IF
>
> Gives me a headache to try to evaluate that.  Much better, in my opinion,
> to introduce ONE LOUSY "GOTO EO-PARAGRAPH" like this:
>
>   PERFORM 1050-LOOP THRU 1059-LOOP VARYING JC FROM 1 BY 1 TO 99
>
>   1050-LOOP.
>     IF X > 999 GOTO 1059-LOOP.
>     IF FIRST-NAME = "ROBERT" GOTO 1059-LOOP.
>     IF TYPE <> 195 GOTO 1059-LOOP.
>     IF NOT SO-ON GOTO 1059-LOOP.
>     IF NOT SO-FORTH GOTO 1059-LOOP.
>     EXECUTE 1050-SUCH-AND-SUCH
>   1059-LOOP.
>
> Keep in mind I haven't programmed in COBOL since Y2K; I had to look up the
> syntax, I probably got part of it wrong nonetheless, and I'll bet there are
> easier ways to do it nowadays.  In REXX, for example, they have the ITERATE
> statement:
>
>   do jc=1 to 99
>     if x>99 then iterate
>     if firstname='ROBERT' then iterate
>     if type<>195 then iterate
>     if \soon then iterate
>     if \soforth then iterate
>     call suchandsuch
>     end
>
> However you do it, I vastly prefer skip-to-next-item over nested Ifs.  But
> I confess that one single nested IF is not going to give me a headache; I
> just react when I see one.  Not your fault :).
>
> ---
> Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313
>
> /* In an emergency, a drawstring from a parka hood can be used to strangle
> a snoring tent mate.  -"Camping Tips" */
>
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
> Behalf Of Gibney, Dave
> Sent: Friday, June 5, 2020 16:17
>
> Using OP
>          IF TVOLL (IND1) NOT = HIGH-VALUE
>          AND SMOD (IND1) = 'B' OR 'R'
>
> I would do
>          IF TVOLL (IND1) NOT = HIGH-VALUE
>               IF SMOD (IND1) = 'B' OR 'R'
>                   Do the stuff
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to