61 lines
1.1 KiB
Plaintext
61 lines
1.1 KiB
Plaintext
Procedure.s Consolidate(s.s)
|
|
Dim sets.s(100)
|
|
Define.i n, i, j, k, p
|
|
Define.s ts.s, temp.s
|
|
|
|
n = 0
|
|
For i = 1 To Len(s)
|
|
If Mid(s, i, 1) = ",":
|
|
n + 1
|
|
Else
|
|
sets(n) = sets(n) + Mid(s, i, 1)
|
|
EndIf
|
|
Next i
|
|
|
|
For i = 0 To n
|
|
p = i
|
|
ts = ""
|
|
For j = i To 0 Step -1
|
|
If ts = "":
|
|
p = j
|
|
EndIf
|
|
ts = ""
|
|
For k = 1 To Len(sets(p))
|
|
If j > 0:
|
|
If FindString(sets(j-1), Mid(sets(p), k, 1)) = 0:
|
|
ts = ts + Mid(sets(p), k, 1)
|
|
EndIf
|
|
EndIf
|
|
Next k
|
|
If Len(ts) < Len(sets(p)):
|
|
If j > 0:
|
|
sets(j-1) = sets(j-1) + ts
|
|
sets(p) = "-"
|
|
ts = ""
|
|
EndIf
|
|
Else
|
|
p = i
|
|
EndIf
|
|
Next j
|
|
Next i
|
|
|
|
temp = sets(0)
|
|
For i = 1 To n
|
|
temp = temp + "," + sets(i)
|
|
Next i
|
|
|
|
ProcedureReturn s + " = " + temp
|
|
EndProcedure
|
|
|
|
OpenConsole()
|
|
Dim test.s(3) ;= {"AB","AB,CD","AB,CD,DB","HIK,AB,CD,DB,FGH"}
|
|
test(0) = "AB"
|
|
test(1) = "AB,CD"
|
|
test(2) = "AB,CD,DB"
|
|
test(3) = "HIK,AB,CD,DB,FGH"
|
|
For t.i = 0 To 3
|
|
PrintN(Consolidate(test(t)))
|
|
Next t
|
|
PrintN(#CRLF$ + "Press ENTER to exit"): Input()
|
|
CloseConsole()
|