SIMSET BEGIN LINK CLASS ITEM(TXT); TEXT TXT;; REF(HEAD) PROCEDURE SPLIT(TXT, SEP, ESC); TEXT TXT; CHARACTER SEP, ESC; BEGIN REF(HEAD) PARTS; CHARACTER CH; TEXT PART; PART :- BLANKS(TXT.LENGTH); PARTS :- NEW HEAD; TXT.SETPOS(1); WHILE TXT.MORE DO BEGIN CH := TXT.GETCHAR; IF CH = ESC THEN BEGIN IF TXT.MORE THEN BEGIN CH := TXT.GETCHAR; PART.PUTCHAR(CH); END ELSE BEGIN ERROR("SPLIT: ESCAPE CHAR AT END OF STRING"); END; END ELSE IF CH = SEP THEN BEGIN NEW ITEM(COPY(PART.SUB(1,PART.POS-1))).INTO(PARTS); PART.SETPOS(1); END ELSE BEGIN PART.PUTCHAR(CH); END; END; NEW ITEM(COPY(PART.SUB(1,PART.POS-1))).INTO(PARTS); SPLIT :- PARTS; END SPLIT; TEXT EXAMPLE; REF(HEAD) RESULT; REF(ITEM) PART; INTEGER NO; FOR EXAMPLE :- "ONE^|UNO||THREE^^^^|FOUR^^^|^CUATRO|" DO BEGIN OUTTEXT("INPUT: '"); OUTTEXT(EXAMPLE); OUTTEXT("'"); OUTIMAGE; RESULT :- SPLIT(EXAMPLE, '|', '^'); PART :- RESULT.FIRST; NO := 0; WHILE PART =/= NONE DO BEGIN NO := NO + 1; OUTTEXT("PART"); OUTINT(NO, 0); OUTTEXT(": '"); OUTTEXT(PART.TXT); OUTTEXT("'"); OUTIMAGE; PART :- PART.SUC; END; END; END.