Created
July 2, 2020 16:57
-
-
Save chriseldredge/e7199ab7cc62b133e1db60c26b30f936 to your computer and use it in GitHub Desktop.
Run-length encoding in COBOL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*----------------------- | |
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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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