Skip to content

Instantly share code, notes, and snippets.

@chriseldredge
Created July 2, 2020 16:57
Show Gist options
  • Save chriseldredge/e7199ab7cc62b133e1db60c26b30f936 to your computer and use it in GitHub Desktop.
Save chriseldredge/e7199ab7cc62b133e1db60c26b30f936 to your computer and use it in GitHub Desktop.
Run-length encoding in COBOL
*-----------------------
IDENTIFICATION DIVISION.
*-----------------------
PROGRAM-ID. RLE.
*--------------------
DATA DIVISION.
*-------------
WORKING-STORAGE SECTION.
01 INSTR PIC X(80).
01 OUTSTR PIC X(80).
01 LASTCHR PIC X.
01 CHR PIC X.
01 CHRCOUNT PIC 9(1).
01 COUNTER PIC 9(2).
*------------------
PROCEDURE DIVISION.
*------------------
MAIN.
MOVE Z'aaabbcaa' TO INSTR.
PERFORM RUNLENGH-ENCODE.
PERFORM DISP-RESULT.
STOP RUN.
DISP-RESULT.
MOVE 0 TO COUNTER
INSPECT OUTSTR TALLYING COUNTER FOR CHARACTERS BEFORE X'00'.
DISPLAY OUTSTR(1:COUNTER).
RUNLENGH-ENCODE.
MOVE 1 TO CHRCOUNT.
MOVE INSTR(1:1) TO CHR.
MOVE INSTR(1:1) TO LASTCHR.
MOVE Z'' TO OUTSTR.
PERFORM VARYING COUNTER FROM 2 BY 1
UNTIL CHR EQUAL X'00'
MOVE INSTR(COUNTER:1) TO CHR
IF CHR EQUAL LASTCHR AND CHRCOUNT < 9 THEN
ADD 1 TO CHRCOUNT
ELSE
STRING
OUTSTR DELIMITED BY X'00'
CHRCOUNT DELIMITED BY SIZE
LASTCHR DELIMITED BY SIZE
X'00' DELIMITED BY SIZE
INTO OUTSTR
END-STRING
MOVE 1 TO CHRCOUNT
MOVE CHR TO LASTCHR
END-IF
END-PERFORM.
//RLEJ JOB 1,NOTIFY=&SYSUID
//***************************************************/
//COBRUN EXEC IGYWCL
//COBOL.SYSIN DD DSN=&SYSUID..CBL(RLE),DISP=SHR
//LKED.SYSLMOD DD DSN=&SYSUID..LOAD(RLE),DISP=SHR
//***************************************************/
// IF RC = 0 THEN
//***************************************************/
//RUN EXEC PGM=RLE
//STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR
//SYSOUT DD SYSOUT=*,OUTLIM=15000
//CEEDUMP DD DUMMY
//SYSUDUMP DD DUMMY
//***************************************************/
// ELSE
// ENDIF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment