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..

EDIT MASKS – Masking variables in Easytrieve

have you already read Easytrieve Variable declaration?

For creating reports, or printing (displaying) numeric variables, we will always need masking. It can be used to print the decimal character for the variables that have implied decimal

 WS-SSN W 9 N MASK '999-99-9999'
 ...
 MOVE 123456789 TO WS-SSN
 DISPLAY ' WS-SSN : ' WS-SSN

This will be printed as

 WS-SSN : 123-45-6789

Edit mask pattern is created by using combinations of the following characters:

9 — causes a digit to print. (including leading zeros)

Z — causes a digit to print (except for leading zeros)

$ — causes a currency symbol to print prior to the first non-zero digit

more examples to come..

DISPLAY statement in Easytrieve

DISPLAY statement in Easytrieve is exactly the same as in COBOL.

 WS-VAR1 W 20 A VALUE 'I AM INITIALIZED HERE'
 ...
 DISPLAY 'value of WS-VAR1 is: ' WS-VAR1

This will be printed as

 value of WS-VAR1 is: I AM INITIALIZED HERE

If you want to continue the DISPLAY statement in multiple lines, use ‘+’ symbol as continuation character

 WS-VAR1 W 20 A VALUE 'I AM INITIALIZED HERE'
 ...
 DISPLAY 'value of WS-VAR1 is: ' +
         WS-VAR1

Update / RE WRITE VSAM file in Easytrieve

Updating/ REWRITING a VSAM record:
VSAM declaration should look like,

 FILE FILE2 VS UPDATE

FILE2 is the DD name – must have DISP=OLD

Reading VSAM file by Key and updating the record

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
 LIST ON
 FILE FILE1 FB(80 200)
   IN-REC 1 80 A
   IN-KEY 1 8 A
 FILE FILE2 VS UPDATE
   F2-REC 1 18 A
   F2-KEY 1 8 A
   F2-VALUE 9 10 N
 JOB INPUT NULL
 GET FILE1
 DO WHILE NOT EOF FILE1
   READ FILE2 KEY IN-KEY STATUS
   IF FILE2 : FILE-STATUS EQ 0
      F2-VALUE = F2-VALUE + 5
      WRITE FILE2 UPDATE
   ELSE
      DISPLAY IN-KEY ' NOT PRESENT IN VSAM FILE'
   END-IF
   GET INFILE
 END-DO
 STOP