18 lines
634 B
Plaintext
18 lines
634 B
Plaintext
RANGCONT(X) ;Integer range contraction
|
|
NEW Y,I,CONT,NOTFIRST,CURR,PREV,NEXT,SEQ SET Y="",SEQ=0,PREV="",CONT=0
|
|
FOR I=1:1:$LENGTH(X,",") DO
|
|
.SET NOTFIRST=$LENGTH(Y),CURR=$PIECE(X,",",I),NEXT=$PIECE(X,",",I+1)
|
|
.FOR Q:$EXTRACT(CURR)'=" " S CURR=$EXTRACT(CURR,2,$LENGTH(CURR)) ;clean up leading spaces
|
|
.S SEQ=((CURR-1)=PREV)&((CURR+1)=NEXT)
|
|
.IF 'NOTFIRST SET Y=CURR
|
|
.IF NOTFIRST DO
|
|
..;Order matters due to flags
|
|
..IF CONT&SEQ ;Do nothing
|
|
..IF 'CONT&'SEQ SET Y=Y_","_CURR
|
|
..IF CONT&'SEQ SET Y=Y_CURR,CONT=0
|
|
..IF 'CONT&SEQ SET Y=Y_"-",CONT=1
|
|
.SET PREV=CURR
|
|
IF CONT SET Y=Y_PREV
|
|
K I,CONT,NOTFIRST,CURR,PREV,NEXT,SEQ
|
|
QUIT Y
|