64 lines
1.5 KiB
Plaintext
64 lines
1.5 KiB
Plaintext
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.
|