You are on page 1of 2

$ SET SOURCEFORMAT"FREE"

IDENTIFICATION DIVISION.
PROGRAM-ID. UnstringFileEg.
AUTHOR. Michael Coughlan.
* Example showing the unpacking of comma separated records
* and the size validation of the unpacked fields.
* In this example we have only implemented unpacking
* an InsertSupplier record.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT VarLengthRecFile ASSIGN TO "VarLen.DAT"
ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD VarLengthRecFile.
01 VarLenRec.
88 EndOfFile VALUE HIGH-VALUES.
02 TypeCode PIC XX.
88 DeleteSupplier VALUE "1,".
88 DeleteVideo VALUE "2,".
88 InsertVideo VALUE "3,".
88 InsertSupplier VALUE "4,".
88 ValidTypeCode VALUE "1,", "2,", "3,","4,".

02 RemainingRec PIC X(78).

WORKING-STORAGE SECTION.
01 InsertSupplierRec.
02 TransType PIC 9.
02 TransDate PIC X(8).
02 Supplier-Code PIC XX.
02 Supplier-Name PIC X(20).
02 Supplier-Address PIC X(50).

* These counts allow us to detect if there are too many chars


* in a particular field. For instance the date field should be
* 8 characters in size.
01 InsertSupplierCounts.
02 DateCount PIC 99.
88 ValidDate VALUE 8.
02 SuppCodeCount PIC 99.
88 ValidSuppCode VALUE 1 THRU 2.
02 SuppNameCount PIC 99.
88 ValidSuppName VALUE 1 THRU 20.
02 SuppAdrCount PIC 99.
88 ValidSuppAdr VALUE 1 THRU 50.

01 StringEnd PIC 99.

PROCEDURE DIVISION.
Begin.
OPEN INPUT VarLengthRecFile
READ VarLengthRecFile
AT END SET EndOfFile TO TRUE
END-READ
PERFORM UNTIL EndOfFile
MOVE ZEROS TO InsertSupplierCounts
* First find the actual length of the record
PERFORM VARYING StringEnd FROM 78 BY -1
UNTIL RemainingRec(StringEnd:1) NOT = SPACE
END-PERFORM
IF InsertSupplier
UNSTRING RemainingRec(1:StringEnd) DELIMITED BY ","
INTO TransDate COUNT IN DateCount
Supplier-Code COUNT IN SuppCodeCount
Supplier-Name COUNT IN SuppNameCount
Supplier-Address COUNT IN SuppAdrCount
END-UNSTRING
PERFORM CheckForErrors
ELSE
IF NOT ValidTypeCode
DISPLAY SPACE
DISPLAY "Record = " VarLenRec(1:70)
DISPLAY "Type code is not valid"
END-IF
END-IF
READ VarLengthRecFile
AT END SET EndOfFile TO TRUE
END-READ
END-PERFORM
CLOSE VarLengthRecFile
STOP RUN.

CheckForErrors.
DISPLAY SPACE
DISPLAY "Record = " VarLenRec(1:70)
IF NOT ValidDate DISPLAY "Date Size Error" END-IF
IF NOT ValidSuppCode DISPLAY "Supplier Code Error" END-IF
IF NOT ValidSuppName DISPLAY "Supplier name Error" END-IF
IF NOT ValidSuppAdr DISPLAY "Supplier address Error" END-IF.

You might also like