Jump to content

Tokenize a string: Difference between revisions

→‎[[Tokenizing A String#ALGOL 68]]: Who split the beetles: substring OR chararray?
(added Io)
(→‎[[Tokenizing A String#ALGOL 68]]: Who split the beetles: substring OR chararray?)
Line 25:
=={{header|ALGOL 68}}==
main:(
OP +:= = (REF FLEX[]STRING list, STRING item)VOID:(
OP +:= HEAP [LWB= list:(REF UPB list+1FLEX[]STRING in out;, STRING item)VOID:(
out[LWB listin out: UPB listin out+1]:=listSTRING new;
outnew[LWB in out: UPB in out]:=itemin out;
listnew[UPB new]:= outitem;
in out := new
);
PROC string split = (REF STRING stringbeetles, sepSTRING substr)[]STRING:(
""" Split beetles where substr is found """;
FLEX[1:0]STRING out;
INT start := 1, pos;
WHILE string in string(sepsubstr, pos, stringbeetles[start:]) DO
out +:= stringSTRING(beetles[start:start+pos-2]);
start +:= pos + UPB sepsubstr - 1
OD;
IF start > LWB stringbeetles THEN
out +:= stringSTRING(beetles[start:])
FI;
out
);
OPPROC +:=char split = (REF FLEX[]STRING listbeetles, STRING itemchars)VOID[]STRING: (
printf(($g"."$, split("Hello,How,Are,You,Today",","),$l$))
""" Split beetles where character is found in chars """;
FLEX[1:0]STRING out;
FILE beetlesf;
STRING solo;
associate(beetlesf, beetles);
make term(beetlesf, chars);
PROC raise logical file end = (REF FILE f)BOOL: except logical file end;
on logical file end(beetlesf, raise logical file end);
DO
getf(beetlesf, ($g$, solo));
out+:=solo;
getf(beetlesf, ($x$))
OD;
except logical file end:
SKIP;
out
);
STRING beetles := "John Lennon, Paul McCartney, George Harrison, Ringo Starr";
printf(($g"."$, string split(beetles, ", "),$l$));
printf(($g"."$, char split("Hello,How,Are,You,Today"beetles, ", "),$l$))
)
Output:<pre>
John Lennon.Paul McCartney.George Harrison.Ringo Starr.
Hello.How.Are.You.Today.
John.Lennon..Paul.McCartney..George.Harrison..Ringo.Starr.
</pre>
 
=={{header|C}}==
 
Cookies help us deliver our services. By using our services, you agree to our use of cookies.