72 lines
1.2 KiB
Text
72 lines
1.2 KiB
Text
BYTE FUNC Find(CHAR ARRAY text CHAR c BYTE start)
|
|
BYTE i
|
|
|
|
i=start
|
|
WHILE i<=text(0)
|
|
DO
|
|
IF text(i)=c THEN
|
|
RETURN (i)
|
|
FI
|
|
i==+1
|
|
OD
|
|
RETURN (0)
|
|
|
|
PROC ProcessItem(CHAR ARRAY text INT ARRAY res INT POINTER size)
|
|
BYTE pos
|
|
INT start,end,i
|
|
CHAR ARRAY tmp(200)
|
|
|
|
pos=Find(text,'-,2)
|
|
IF pos=0 THEN
|
|
res(size^)=ValI(text)
|
|
size^==+1
|
|
ELSE
|
|
SCopyS(tmp,text,1,pos-1)
|
|
start=ValI(tmp)
|
|
SCopyS(tmp,text,pos+1,text(0))
|
|
end=ValI(tmp)
|
|
FOR i=start TO end
|
|
DO
|
|
res(size^)=i
|
|
size^==+1
|
|
OD
|
|
FI
|
|
RETURN
|
|
|
|
PROC RangeExtraction(CHAR ARRAY text INT ARRAY res INT POINTER size)
|
|
BYTE i,pos
|
|
CHAR ARRAY tmp(200)
|
|
|
|
i=1 size^=0
|
|
WHILE i<=text(0)
|
|
DO
|
|
pos=Find(text,',,i)
|
|
IF pos=0 THEN
|
|
SCopyS(tmp,text,i,text(0))
|
|
i=text(0)+1
|
|
ELSE
|
|
SCopyS(tmp,text,i,pos-1)
|
|
i=pos+1
|
|
FI
|
|
ProcessItem(tmp,res,size)
|
|
OD
|
|
RETURN
|
|
|
|
PROC PrintArray(INT ARRAY a INT size)
|
|
INT i
|
|
|
|
Put('[)
|
|
FOR i=0 TO size-1
|
|
DO
|
|
IF i>0 THEN Put(' ) FI
|
|
PrintI(a(i))
|
|
OD
|
|
Put(']) PutE()
|
|
RETURN
|
|
|
|
PROC Main()
|
|
INT ARRAY res(100)
|
|
INT size
|
|
RangeExtraction("-6,-3--1,3-5,7-11,14,15,17-20",res,@size)
|
|
PrintArray(res,size)
|
|
RETURN
|