Easytrieve – check if value IS NUMERIC in an alpha variable

Similar to how we have the ‘IS NUMERIC’ verb in COBOL, we can validate if a Alphanumeric variable contains Numeric value or not in Easytrieve.

Sample program:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
 DEFINE WS-ALPHA W 6 A
 JOB INPUT NULL
* ----- NOT NUMERIC --------
 WS-ALPHA = 'AB1234'
 IF WS-ALPHA NUMERIC
    DISPLAY WS-ALPHA ' IS NUMERIC'
 ELSE
    DISPLAY WS-ALPHA ' IS NOT NUMERIC'
 END-IF
* ----- NUMERIC --------
 WS-ALPHA = '123456'
 IF WS-ALPHA NUMERIC
    DISPLAY WS-ALPHA ' IS NUMERIC'
 ELSE
    DISPLAY WS-ALPHA ' IS NOT NUMERIC'
 END-IF
* ----- NOT NUMERIC --------
 WS-ALPHA = '123.45'
 IF WS-ALPHA NUMERIC
    DISPLAY WS-ALPHA ' IS NUMERIC'
 ELSE
    DISPLAY WS-ALPHA ' IS NOT NUMERIC'
 END-IF
* ----- NOT NUMERIC --------
 WS-ALPHA = '  1234'
 IF WS-ALPHA NUMERIC
    DISPLAY WS-ALPHA ' IS NUMERIC'
 ELSE
    DISPLAY WS-ALPHA ' IS NOT NUMERIC'
 END-IF
 STOP
Advertisement

Easytrieve program to parse a string

Below program parses a string that contains 3 words which are separated by space.

FULL-NAME contains ‘KARTHIK KAR THIK’, which is split into First name, Middle name and Last name.

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
 DEFINE IND1 W 3 N VALUE 1 
 DEFINE IND2 W 3 N VALUE 1 
 DEFINE FLAG W 1 N VALUE 1 
 DEFINE FULL-NAME W 30 A VALUE 'KARTHIK KAR THIK' 
 DEFINE FIRST-NAME W 15 A 
 DEFINE MID-NAME W 15 A 
 DEFINE LAST-NAME W 15 A 
 DEFINE FULL-NAME-ARRAY  FULL-NAME  1 A OCCURS 30 
 DEFINE FIRST-NAME-ARRAY FIRST-NAME 1 A.OCCURS 15 
 DEFINE MID-NAME-ARRAY   MID-NAME   1 A OCCURS 15 
 DEFINE LAST-NAME-ARRAY  LAST-NAME  1 A OCCURS 15 
 JOB INPUT NULL 
   DO WHILE IND1 LE 30 
      IF FULL-NAME-ARRAY(IND1) NE ' '
         CASE FLAG 
            WHEN 1 
              MOVE FULL-NAME-ARRAY(IND1) TO FIRST-NAME-ARRAY(IND2)
            WHEN 2 
              MOVE FULL-NAME-APRAY(IND1) TO MID-NAME-ARRAY(IND2) 
            WHEN 3 
              MOVE FULL-NAME-ARRAY(IND1) TO LAST-NAME-ARRAY(IND2) 
         END-CASE 
         IND2 = IND2 + 1 
      ELSE 
         IND2 = 1 
         FLAG = FLAG + 1
      END-IF 
      IND1 = IND1 + 1 
   END-DO 
   DISPLAY FIRST-NAME 
   DISPLAY MID-NAME 
   DISPLAY LAST-NAME 
STOP

Output will be,

KARTHIK
KAR
THIK

simple and nested IF-ELSE-ENDIF statement in Easytrieve

IF ELSE ENDIF statement in Easytrieve is similar to how we do in COBOL.

Below are some sample programs that will help you understand.

 LIST ON
 DEFINE WS-FIVE W 5 N VALUE 5
 JOB INPUT NULL
 IF WS-FIVE EQ 5
    DISPLAY 'WS-FIVE IS 5'
 END-IF
 STOP
 LIST ON
 DEFINE WS-FIVE W 5 N VALUE 5
 JOB INPUT NULL
 IF WS-FIVE EQ 5
    DISPLAY 'WS-FIVE IS 5'
 ELSE 
    DISPLAY 'WS-FIVE IS NOT 5'
 END-IF
 STOP
 LIST ON
 DEFINE WS-NUM W 5 N VALUE 6
 JOB INPUT NULL
 IF WS-NUM EQ 5
    DISPLAY 'WS-NUM IS 5'
 ELSE 
    IF WS-NUM EQ 6
       DISPLAY 'WS-NUM IS 6'
    ELSE 
       DISPLAY 'WS-NUM IS NOT 5 OR 6'
    END-IF
 END-IF
 STOP

Easytrieve Error messages A0** and B0**

A001 File OPEN Error
A002 Invalid block Size
A003 Insufficient Core storage
A005 I/O error
A007 Table input not in sequence
A008 Too many table entries
A009 report processing terminated due to sort error
A012 Invalid Length of file name
A013 wrong record length for a file

B003 Expected continuation not received
B004 Report Exceeds page size
B007 Invalid IF END-if pairing
B010 Invalid Block size
B011 Table input not in sequence
B012 Duplicate name for a file, field or report
B027 Not a valid name file,field or report
B048 Field name not in file
B094 Invalid record format

More Error messages

A001  A002  A003  A004  A005  A006  A007  A008  A009  A010  A011  A012  A013  A014  A015  A016  A017  A018  A019  A020  A021  A022  A023  A024  A025  A026  A027  A028  A029  A030  A031  A032  A033  A034  A035  A036  A037  A038  A039  A041  A043  A044  A045  A046  B001  B002  B003  B004  B005  B006  B007  B008  B009  B010  B011  B012  B013  B014  B015  B016  B017  B018  B019  B020  B021  B022  B023  B024  B025  B026  B027  B028  B029  B030  B031  B032  B033  B034  B035  B036  B037  B038  B039  B040  B041  B042  B043  B044  B045  B046  B047  B048  B049  B050  B051  B052  B053  B054  B055  B056  B057  B058  B059  B060  B061  B062  B063  B064  B065  B066  B067  B068  B069  B070  B071  B072  B073  B074  B075  B076  B077  B078  B079  B080  B081  B082  B083  B084  B085  B086  B087  B088  B089  B090  B091  B092  B093  B094  B095  B096  B097  B098  B099  B100  B101  B102  B103  B104  B105  B106  B107  B108  B109  B110  B111  B112  B113  B114  B115  B116  B117  B118  B119  B120  B121  B122  B123  B124  B125  B126  B127  B128  B129  B130  B131  B132  B133  B134  B135  B136  B137  B138  B139  B140  B141  B142  B143  B144  B145  B146  B147  B148  B149  B150  B151  B152  B153  B154  B155  B156  B157  B158  B159  B160  B161  B162  B163  B164  B165  B166  B167  B168  B169  B170  B171  B172  B173  B174  B175  B176  B177  B178  B179  B180  B181  B182  B183  B184  B185  B186  B187  B188  B189  B190  B191  B192  B196  B197  B198  B199  B200  B201  B202  B203  B204  B205  B206  B207  B208  B209  B210  B211  B212  B213  B214  B215  B216  B217  B218  B219  B220  B221  B222  B223  B224  B225  B226  B227  B228  B229  B230  B231  B232  B233  B254  B255  B256  B257  B258  B259  B260  B261  B262  B263  B264  B265  B266  B267  B268  B269  B270  B290  B291  B297  B298  B299  B300  B301  B302  B303  B304  B305  B306  B307  B308  B309  B310  B311  B312  B313  CBL777  CBL787

JOB statement with START and FINISH procs in Easytrieve

Consider reading about JOB INPUT statements and PROCs in Easytrieve to know about JOB and PROC in easytrieve (not the usual JOB and PROC in JCL !).

 LIST ON
 JOB INPUT NULL START BEGIN-PROC FINISH FINAL-PROC
   PERFORM MID-PROC
   DISPLAY ' IN THE JOB '
 STOP
*
 BEGIN-PROC. PROC
   DISPLAY ' STARTING ..'
 END-PROC
*
 FINAL-PROC. PROC
   DISPLAY ' ENDING ..'
 END-PROC
*
 MID-PROC. PROC
   DISPLAY ' MIDDLE ..'
 END-PROC
*

In the above program, BEGIN-PROC will execute first (before starting the JOB block) and FINAL-PROC will be executed after the JOB statements are complete. hence, output of this program will look like,

 STARTING ..
 MIDDLE ..
 IN THE JOB
 ENDING ..

PROC (perform paragraph) in Easytrieve

As we use paragraph / section in COBOL, that can be executed multiple times using perform statement, we can use PROC in Easytrieve that can be called using PERFORM statement.

Below example will help you understand the syntax of PROC and PERFORM.

 LIST ON
 FILE INMAST FB 4
    IN-NUM 1 4 N
 JOB INPUT INMAST
  PERFORM DISP-LINE
 END-JOB
*
 DISP-LINE. PROC
   DISPLAY 'IN-NUM IS: ' IN-NUM
 END-PROC
*

File INMAST:

0001
0002
0003
0004

the output of this program is

IN-NUM IS: 0001
IN-NUM IS: 0002
IN-NUM IS: 0003
IN-NUM IS: 0004

SORT in Easytrieve

You can Sort a file into another file in Easytrieve. The Syntax is

 SORT file-name-1 +
 TO file-name-2 +
 USING (field-name [D]...) +
 [BEFORE proc-name]
  • file-name-1 is the input file DD Name
  • file-name-2 is the Sorted output file
  • field-name is the field defined in file-name-1, based on which the file has to be sorted
  • If you want the sort to be on Descending order, pass the parameter ‘D’ after the field name (by Default, it will be Ascending)
  • If you have any select criteria to filter what records to be written in the output file, have it in a Proc and give the proc name with BEFORE parameter (optional)

Let us see a couple of sample programs to explain.

Simple Sort on a key

The below program will simply

 FILE INFILE FB(80 960)
   ACCOUNT-NO  1 8 N
*
 FILE OUTFILE
*
 SORT INFILE TO OUTFILE USING ACCOUNT-NO

being updated..