RosettaCodeData/Task/Nested-templated-data/REXX/nested-templated-data-2.rexx
2023-07-01 13:44:08 -04:00

100 lines
1.6 KiB
Rexx

/* REXX */
tok.=''
Do i=0 To 6
tok.i="'Payload#"i"'"
End
t1='[[[1,2],[ 3,4,1],5]]'
t2='1[[[1,6]],[[3,4[7] 0],5]3]9 [8] 9'
Call transform t1
Call transform t2
Exit
transform:
Parse Arg t 1 tt
t=space(t,0)
lvl=0
t.=0
used.=0
undefined=''
Do While t<>''
Parse Var t c +1 t
Select
When c='[' Then
lvl=lvl+1
When c=']' Then
lvl=lvl-1
When c=',' Then
Nop
Otherwise Do
t=c||t
p1=pos(']',t)
p2=pos('[',t)
Select
When p2=0 Then p=p1
When p1=0 Then p=p2
Otherwise p=min(p1,p2)
End
If p=0 Then Do
Call mem lvl': >'t'<'
t=''
End
Else Do
Call mem lvl': >'left(t,p-1)'<'
t=substr(t,p)
End
End
End
End
Call show
Return
mem:
z=t.0+1
t.z=arg(1)
t.0=z
Return
show:
Say tt
Say 'lvl Element'
Do i=1 To t.0
Parse Var t.i lvl ':' '>' cont '<'
ol=right(lvl,3) copies(' ',lvl*3)cont(cont)
Say ol
End
Do i=0 To 6
If used.i=0 Then Say 'Payload' i 'not used'
End
Do While undefined>''
Parse Var undefined i undefined
Say 'Payload' i 'is not defined'
End
Call o ' '
Return
cont: Procedure Expose tok. used. undefined
Parse Arg list
list=translate(list,' ',',')
res=''
Do while list>''
Parse Var list i list
res= res tok(i)','
End
res=strip(res)
res=strip(res,'T',',')
Return res
tok: Procedure Expose tok. used. undefined
Parse Arg i
If tok.i<>'' Then Do
used.i=1
Return tok.i
End
Else Do
If wordpos(i,undefined)=0 Then
undefined=undefined i
Return "'Payload#"i "not defined'"
End
o: Say arg(1)
Return