93 lines
2.5 KiB
COBOL
93 lines
2.5 KiB
COBOL
>>SOURCE FREE
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. expand-range.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 comma-pos PIC 99 COMP VALUE 1.
|
|
01 dash-pos PIC 99 COMP.
|
|
01 end-num PIC S9(3).
|
|
01 Max-Part-Len CONSTANT 10.
|
|
01 num PIC S9(3).
|
|
01 edited-num PIC -(3)9.
|
|
01 part PIC X(10).
|
|
|
|
01 part-flag PIC X.
|
|
88 last-part VALUE "Y".
|
|
|
|
01 range-str PIC X(80).
|
|
01 Range-Str-Len CONSTANT 80.
|
|
01 start-pos PIC 99 COMP.
|
|
01 start-num PIC S9(3).
|
|
|
|
PROCEDURE DIVISION.
|
|
ACCEPT range-str
|
|
|
|
PERFORM WITH TEST AFTER UNTIL last-part
|
|
UNSTRING range-str DELIMITED BY "," INTO part WITH POINTER comma-pos
|
|
PERFORM check-if-last
|
|
|
|
PERFORM find-range-dash
|
|
|
|
IF dash-pos > Max-Part-Len
|
|
PERFORM display-num
|
|
ELSE
|
|
PERFORM display-range
|
|
END-IF
|
|
END-PERFORM
|
|
|
|
DISPLAY SPACES
|
|
|
|
GOBACK
|
|
.
|
|
check-if-last SECTION.
|
|
IF comma-pos > Range-Str-Len
|
|
SET last-part TO TRUE
|
|
END-IF
|
|
.
|
|
find-range-dash SECTION.
|
|
IF part (1:1) <> "-"
|
|
MOVE 1 TO start-pos
|
|
ELSE
|
|
MOVE 2 TO start-pos
|
|
END-IF
|
|
|
|
MOVE 1 TO dash-pos
|
|
INSPECT part (start-pos:) TALLYING dash-pos FOR CHARACTERS BEFORE "-"
|
|
COMPUTE dash-pos = dash-pos + start-pos - 1
|
|
.
|
|
display-num SECTION.
|
|
MOVE part TO edited-num
|
|
CALL "display-edited-num" USING CONTENT part-flag, edited-num
|
|
.
|
|
display-range SECTION.
|
|
MOVE part (1:dash-pos - 1) TO start-num
|
|
MOVE part (dash-pos + 1:) TO end-num
|
|
|
|
PERFORM VARYING num FROM start-num BY 1 UNTIL num = end-num
|
|
MOVE num TO edited-num
|
|
CALL "display-edited-num" USING CONTENT "N", edited-num
|
|
END-PERFORM
|
|
|
|
MOVE end-num TO edited-num
|
|
CALL "display-edited-num" USING CONTENT part-flag, edited-num
|
|
.
|
|
END PROGRAM expand-range.
|
|
|
|
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. display-edited-num.
|
|
|
|
DATA DIVISION.
|
|
LINKAGE SECTION.
|
|
01 hide-comma-flag PIC X.
|
|
88 hide-comma VALUE "Y".
|
|
01 edited-num PIC -(3)9.
|
|
|
|
PROCEDURE DIVISION USING hide-comma-flag, edited-num.
|
|
DISPLAY FUNCTION TRIM(edited-num) NO ADVANCING
|
|
IF NOT hide-comma
|
|
DISPLAY ", " NO ADVANCING
|
|
END-IF
|
|
.
|
|
END PROGRAM display-edited-num.
|