RosettaCodeData/Task/Range-extraction/BBC-BASIC/range-extraction.basic

27 lines
776 B
Plaintext

range$ = " 0, 1, 2, 4, 6, 7, 8, 11, 12, 14, " + \
\ "15, 16, 17, 18, 19, 20, 21, 22, 23, 24, " + \
\ "25, 27, 28, 29, 30, 31, 32, 33, 35, 36, " + \
\ "37, 38, 39"
PRINT FNrangeextract(range$)
END
DEF FNrangeextract(r$)
LOCAL f%, i%, r%, t%, t$
f% = VAL(r$)
REPEAT
i% = INSTR(r$, ",", i%+1)
t% = VALMID$(r$, i%+1)
IF t% = f% + r% + 1 THEN
r% += 1
ELSE
CASE r% OF
WHEN 0: t$ += STR$(f%) + ","
WHEN 1: t$ += STR$(f%) + "," + STR$(f% + r%) + ","
OTHERWISE: t$ += STR$(f%) + "-" + STR$(f% + r%) + ","
ENDCASE
r% = 0
f% = t%
ENDIF
UNTIL i% = 0
= LEFT$(t$)