String Tokenization

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

String Tokenization

Joey Gibson-2
In Java there is a class called StringTokenizer that splits a String in
to pieces, breaking on a set of specified delimiters. I need to do the
same thing in ST, splitting the search path on semicolons. Here's what I
ended up doing:

oc := OrderedCollection new.
path := SessionManager current getenv: #path.
rs := path readStream.
[rs atEnd] whileFalse: [oc add: (rs upTo: $;)].

While this works, I can't help thinking there's a better way. I looked
at the String class but didn't see anything that looked like what I
wanted. Is this what everyone does, or is there a better way?

Joey


-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----==  Over 80,000 Newsgroups - 16 Different Servers! =-----


Reply | Threaded
Open this post in threaded view
|

Re: String Tokenization

Dmitry Zamotkin-3
Hi, Joey

"Joey Gibson" <[hidden email]> wrote in message
news:[hidden email]...
> In Java there is a class called StringTokenizer that splits a String in
> to pieces, breaking on a set of specified delimiters. I need to do the
> same thing in ST, splitting the search path on semicolons. Here's what I
> ended up doing:
>
> oc := OrderedCollection new.
> path := SessionManager current getenv: #path.
> rs := path readStream.
> [rs atEnd] whileFalse: [oc add: (rs upTo: $;)].


Try it:

path := SessionManager current getenv: #path.
oc := path subStrings: ';'.

Sincerely,
Dmitry


Reply | Threaded
Open this post in threaded view
|

Re: String Tokenization

Joey Gibson-2
In article <9gt1p2$eat$[hidden email]>,
[hidden email] says...

> path := SessionManager current getenv: #path.
> oc := path subStrings: ';'.

    Good grief. How did I miss that? Thanks, that's exactly what I
needed...

Joey


-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
-----==  Over 80,000 Newsgroups - 16 Different Servers! =-----


Reply | Threaded
Open this post in threaded view
|

Re: String Tokenization

Ingo Blank
In reply to this post by Joey Gibson-2
Joey,

I have written a little class <StringTokenizer>, which might be useful,
since it is somewhat more flexible, than the built in method.
It also has a subclass <ArithmeticTokenizer>, which scans *very*
simple arithmetic expressions. This is restricted to 1 character wide
terminal symbols. So a*(b+c)/d works, while x == y doesn't.
The latter results in #('x' '=' '=' 'y').

bye
Ingo

"Joey Gibson" <[hidden email]> schrieb im Newsbeitrag
news:[hidden email]...

> In Java there is a class called StringTokenizer that splits a String in
> to pieces, breaking on a set of specified delimiters. I need to do the
> same thing in ST, splitting the search path on semicolons. Here's what I
> ended up doing:
>
> oc := OrderedCollection new.
> path := SessionManager current getenv: #path.
> rs := path readStream.
> [rs atEnd] whileFalse: [oc add: (rs upTo: $;)].
>
> While this works, I can't help thinking there's a better way. I looked
> at the String class but didn't see anything that looked like what I
> wanted. Is this what everyone does, or is there a better way?
>
> Joey
>
>
> -----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
> http://www.newsfeeds.com - The #1 Newsgroup Service in the World!
> -----==  Over 80,000 Newsgroups - 16 Different Servers! =-----
























begin 666 StringTokenizer.pac
M?"!P86-K86=E('P-"G!A8VMA9V4@.CT@4&%C:V%G92!N86UE.B G4W1R:6YG
M5&]K96YI>F5R)RX-"G!A8VMA9V4@<&%X5F5R<VEO;CH@,#L-"@EB87-I8T-O
M;6UE;G0Z("<G+@T*#0IP86-K86=E(&)A<VEC4&%C:V%G959E<G-I;VXZ("<G
M+@T*#0HB061D('1H92!P86-K86=E('-C<FEP=',B#0H-"B)!9&0@=&AE(&-L
M87-S(&YA;65S+"!L;V]S92!M971H;V0@;F%M97,L(&=L;V)A;"!N86UE<RP@
M<F5S;W5R8V4@;F%M97,B#0IP86-K86=E(&-L87-S3F%M97,-"@EA9&0Z("-!
M<FET:&UE=&EC5&]K96YI>F5R.PT*"6%D9#H@(T-H87)3970[#0H)861D.B C
M4W1R:6YG5&]K96YI>F5R.PT*"7EO=7)S96QF+@T*#0IP86-K86=E(&UE=&AO
M9$YA;65S#0H)>6]U<G-E;&8N#0H-"G!A8VMA9V4@9VQO8F%L3F%M97,-"@EY
M;W5R<V5L9BX-"@T*<&%C:V%G92!R97-O=7)C94YA;65S#0H)>6]U<G-E;&8N
M#0H-"B)":6YA<GD@1VQO8F%L($YA;65S(@T*<&%C:V%G92!B:6YA<GE';&]B
M86Q.86UE<SH@*%-E="!N97<-"@EY;W5R<V5L9BDN#0HB4F5S;W5R8V4@3F%M
M97,B#0IP86-K86=E(&%L;%)E<V]U<F-E3F%M97,Z("A3970@;F5W#0H)>6]U
M<G-E;&8I+@T*#0HB061D('1H92!P<F5R97%U:7-I=&4@;F%M97,B#0IP86-K
M86=E('-E=%!R97)E<75I<VET97,Z("A)9&5N=&ET>5-E="!N97<-"@EA9&0Z
M("=$;VQP:&EN)SL-"@EY;W5R<V5L9BDN#0H-"G!A8VMA9V4A#0H-"B)#;&%S
M<R!$969I;FET:6]N<R(A#0H-"D]B:F5C="!S=6)C;&%S<SH@(U-T<FEN9U1O
M:V5N:7IE<@T*"6EN<W1A;F-E5F%R:6%B;&5.86UE<SH@)V1E;&EM<R!K965P
M<R!S=')I;F<G#0H)8VQA<W-687)I86)L94YA;65S.B G)PT*"7!O;VQ$:6-T
M:6]N87)I97,Z("<G#0H)8VQA<W-);G-T86YC959A<FEA8FQE3F%M97,Z("<G
M(0T*4V5T('9A<FEA8FQE4W5B8VQA<W,Z("-#:&%R4V5T#0H):6YS=&%N8V56
M87)I86)L94YA;65S.B G)PT*"6-L87-S5F%R:6%B;&5.86UE<SH@)R<-"@EP
M;V]L1&EC=&EO;F%R:65S.B G)PT*"6-L87-S26YS=&%N8V5687)I86)L94YA
M;65S.B G)R$-"E-T<FEN9U1O:V5N:7IE<B!S=6)C;&%S<SH@(T%R:71H;65T
M:6-4;VME;FEZ97(-"@EI;G-T86YC959A<FEA8FQE3F%M97,Z("<G#0H)8VQA
M<W-687)I86)L94YA;65S.B G)PT*"7!O;VQ$:6-T:6]N87)I97,Z("<G#0H)
M8VQA<W-);G-T86YC959A<FEA8FQE3F%M97,Z("<G(0T*(DQO;W-E($UE=&AO
M9',B(0T*#0HB16YD(&]F('!A8VMA9V4@9&5F:6YI=&EO;B(A#0H-"@T*#0I3
M=')I;F=4;VME;FEZ97(@8V]M;65N=#H@)R<A#0H-"E-T<FEN9U1O:V5N:7IE
M<B!G=6ED.B H1U5)1"!F<F]M4W1R:6YG.B G>S)&-#A!-T8P+30Y0S M-$4V
M,2TX,SDX+4$W,$1&1C(S-#!%-'TG*2$-"@T*(5-T<FEN9U1O:V5N:7IE<B!C
M871E9V]R:65S1F]R0VQA<W,A56YC;&%S<VEF:65D(2 A#0HA4W1R:6YG5&]K
M96YI>F5R(&UE=&AO9'-&;W(A#0H-"F1E;&EM<PT*"2)0<FEV871E("T@06YS
M=V5R('1H92!V86QU92!O9B!T:&4@<F5C96EV97(G<R G)V1E;&EM<R<G(&EN
M<W1A;F-E('9A<FEA8FQE+B(-"F1E;&EM<R!I<TYI;"!I9E1R=64Z6PT*"7-E
M;&8@9&5L:6US.B!S96QF(&-L87-S(&1E9F%U;'1$96QI;7-=+@T*"5YD96QI
M;7,A#0H-"F1E;&EM<SH@86Y/8FIE8W0-"@DB4')I=F%T92 M(%-E="!T:&4@
M=F%L=64@;V8@=&AE(')E8V5I=F5R)W,@)R=D96QI;7,G)R!I;G-T86YC92!V
M87)I86)L92!T;R!T:&4@87)G=6UE;G0L(&%N3V)J96-T+B(-"@T*"61E;&EM
M<R Z/2!A;D]B:F5C="$-"@T*:V5E<',-"@DB4')I=F%T92 M($%N<W=E<B!T
M:&4@=F%L=64@;V8@=&AE(')E8V5I=F5R)W,@)R=K965P<R<G(&EN<W1A;F-E
M('9A<FEA8FQE+B(-"FME97!S(&ES3FEL(&EF5')U93I;#0H)<V5L9B!K965P
M<SH@<V5L9B!C;&%S<R!D969A=6QT2V5E<'-=+@T*#0H)7FME97!S(0T*#0IK
M965P<SH@86Y/8FIE8W0-"@DB4')I=F%T92 M(%-E="!T:&4@=F%L=64@;V8@
M=&AE(')E8V5I=F5R)W,@)R=K965P<R<G(&EN<W1A;F-E('9A<FEA8FQE('1O
M('1H92!A<F=U;65N="P@86Y/8FIE8W0N(@T*#0H):V5E<',@.CT@86Y/8FIE
M8W0A#0H-"G-T<FEN9PT*"2)0<FEV871E("T@06YS=V5R('1H92!V86QU92!O
M9B!T:&4@<F5C96EV97(G<R G)W-T<FEN9R<G(&EN<W1A;F-E('9A<FEA8FQE
M+B(-"G-T<FEN9R!I<TYI;"!I9E1R=64Z6PT*"7-E;&8@<W1R:6YG.B G)UTN
M#0H)7G-T<FEN9R$-"@T*<W1R:6YG.B!A;D]B:F5C= T*"2)0<FEV871E("T@
M4V5T('1H92!V86QU92!O9B!T:&4@<F5C96EV97(G<R G)W-T<FEN9R<G(&EN
M<W1A;F-E('9A<FEA8FQE('1O('1H92!A<F=U;65N="P@86Y/8FIE8W0N(@T*
M#0H)<W1R:6YG(#H](&%N3V)J96-T(0T*#0IT;VME;G,-"GP@;&5N('!O<R!T
M;VL@=&UP('P-"@T*;&5N(#H]('-E;&8@<W1R:6YG('-I>F4N#0IP;W,@.CT@
M,2X-"G1O:R Z/2!/<F1E<F5D0V]L;&5C=&EO;B!N97<N#0IT;7 @.CT@5W)I
M=&53=')E86T@;VXZ(%-T<FEN9R!N97<N#0H-"EMP;W,@/#T@;&5N72!W:&EL
M951R=64Z6PT*"7P@8R!\#0H)#0H)8R Z/2!S96QF('-T<FEN9R!A=#H@<&]S
M+@T*"2AS96QF(&1E;&EM<R!I;F-L=61E<SH@8RD@:694<G5E.EL-"@D)*'-E
M;&8@:V5E<',@:6YC;'5D97,Z(&,I(&EF5')U93I;#0H)"0ET;[hidden email]!T
M;7 @8V]N=&5N=',N#0H)"2 @(" @=&UP(#H](%=R:71E4W1R96%M(&]N.B!3
M=')I;F<@;F5W+@T*"0D)=&UP(&YE>'10=70Z(&-=+@T*"0ET;[hidden email]!T
M;7 @8V]N=&5N=',N#0H)"71M<" Z/2!7<FET95-T<F5A;2!O;CH@4W1R:6YG
M(&YE=PT*"0E=#0H@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @:69&
M86QS93I;#0H)"0ET;7 @;F5X=%!U=#H@8PT*"0E=+@T*"7!O<R Z/2!P;W,@
M*R Q+@T*"5TN#0H-"@ET;[hidden email]!T;7 @8V]N=&5N=',N#0H-"EXH=&]K
M('-E;&5C=#H@6SIE86-H?"!E86-H('-I>F4@/B P72D@87-!<G)A>0T*"0D-
M"B$@(0T*(5-T<FEN9U1O:V5N:7IE<B!C871E9V]R:65S1F]R.B C9&5L:6US
M(6%C8V5S<VEN9R%P<FEV871E(2 A#0HA4W1R:6YG5&]K96YI>F5R(&-A=&5G
M;W)I97-&;W(Z("-D96QI;7,Z(6%C8V5S<VEN9R%P<FEV871E(2 A#0HA4W1R
M:6YG5&]K96YI>F5R(&-A=&5G;W)I97-&;W(Z("-K965P<R%A8V-E<W-I;F<A
M<')I=F%T92$@(0T*(5-T<FEN9U1O:V5N:7IE<B!C871E9V]R:65S1F]R.B C
M:V5E<',Z(6%C8V5S<VEN9R%P<FEV871E(2 A#0HA4W1R:6YG5&]K96YI>F5R
M(&-A=&5G;W)I97-&;W(Z("-S=')I;F<A86-C97-S:6YG(7!R:79A=&4A("$-
M"B%3=')I;F=4;VME;FEZ97(@8V%T96=O<FEE<T9O<CH@(W-T<FEN9SHA86-C
M97-S:6YG(7!R:79A=&4A("$-"B%3=')I;F=4;VME;FEZ97(@8V%T96=O<FEE
M<T9O<CH@(W1O:V5N<R$J+75N8VQA<W-I9FEE9"%P=6)L:6,A("$-"@T*(5-T
M<FEN9U1O:V5N:7IE<B!C;&%S<R!M971H;V1S1F]R(0T*#0ID969A=6QT1&5L
M:6US#0I>0VAA<E-E="!F<F]M4W1R:6YG.B G("<A#0H-"F1E9F%U;'1+965P
M<PT*7D-H87)3970@;F5W(0T*#0IF;W(Z(&%3=')I;F<@#0I><V5L9B!F;W(Z
M(" @(" @("!A4W1R:6YG( T*(" @(" @9&5L:6UI=&5R<SH@<V5L9B!D969A
M=6QT1&5L:6US( T*(" @(" @(0T*#0IF;W(Z(&%3=')I;F<@9&5L:6UI=&5R
M<SH@9&5L:6US#0I><V5L9B!F;W(Z(&%3=')I;F<@9&5L:6UI=&5R<SH@9&5L
M:6US(&ME97!S.B!S96QF(&1E9F%U;'1+965P<R$-"@T*9F]R.B!A4W1R:6YG
M(&1E;&EM:71E<G,Z(&1E;&EM<U-T<FEN9R!K965P<SH@:V5E<'-3=')I;F<-
M"@T*7G-E;&8@;F5W#0H)<W1R:6YG.B!A4W1R:6YG(#L-"@ED96QI;7,Z("A#
M:&%R4V5T(&9R;VU3=')I;F<Z(&1E;&EM<U-T<FEN9RD@.PT*"6ME97!S.B @
M*$-H87)3970@9G)O;5-T<FEN9SH@:V5E<'-3=')I;F<I(#L-"@EY;W5R<V5L
M9@T*("$@(0T*(5-T<FEN9U1O:V5N:7IE<B!C;&%S<R!C871E9V]R:65S1F]R
M.B C9&5F875L=$1E;&EM<R$J+75N8VQA<W-I9FEE9"%P<FEV871E(2 A#0HA
M4W1R:6YG5&]K96YI>F5R(&-L87-S(&-A=&5G;W)I97-&;W(Z("-D969A=6QT
M2V5E<',A*BUU;F-L87-S:69I960A<')I=F%T92$@(0T*(5-T<FEN9U1O:V5N
M:7IE<B!C;&%S<R!C871E9V]R:65S1F]R.B C9F]R.B$J+75N8VQA<W-I9FEE
M9"%P=6)L:6,A("$-"B%3=')I;F=4;VME;FEZ97(@8VQA<W,@8V%T96=O<FEE
M<T9O<CH@(V9O<CID96QI;6ET97)S.B$J+75N8VQA<W-I9FEE9"%P=6)L:6,A
M("$-"B%3=')I;F=4;VME;FEZ97(@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V9O
M<CID96QI;6ET97)S.FME97!S.B$J+75N8VQA<W-I9FEE9"%P=6)L:6,A("$-
M"@T*#0H-"D-H87)3970@8V]M;65N=#H@)R<A#0H-"D-H87)3970@9W5I9#H@
M*$=5240@9G)O;5-T<FEN9SH@)WLW-T-%1$1$,BU#,#,Y+31!.3DM.#@S-"TS
M1#%"03$T,T8T1$1])RDA#0H-"B%#:&%R4V5T(&-A=&5G;W)I97-&;W)#;&%S
M<R%5;F-L87-S:69I960A("$-"B%#:&%R4V5T(&-L87-S(&UE=&AO9'-&;W(A
M#0H-"F9R;VTZ(&$@=&\Z(&(-"GQS? T*(B1)9#H@:6)L("T@1&]N;F5R<W1A
M9RP@,3DN($%P<FEL(#(P,#$@+" P,3HU.3HU.20B#0H-"B-I8FPN#0H-"G,@
M.CT@<V5L9B!N97<N#0HH82!C;V1E4&]I;G0@=&\Z("AB(&-O9&50;VEN="DI
M(&1O.B!;.FD@?"!S(&%D9#H@*$-H87)A8W1E<B!V86QU93H@:2E=+@T*7G,-
M"B$-"@T*9G)O;5-T<FEN9SH@85-T<FEN9PT*(B1)9#H@061M:6YI<W1R871O
M<B M($UI='1W;V-H+" R-2X@07!R:6P@,C P,2 L(#$W.C(P.C,W)"(-"GQS
M? T*(VEB;"X-"G,@.CT@<V5L9B!N97<N#0IA4W1R:6YG(&1O.B!;.F5A8V@@
M?"!S(&%D9#H@96%C:%TN#0I><PT*(2 A#0HA0VAA<E-E="!C;&%S<R!C871E
M9V]R:65S1F]R.B C9G)O;3IT;SHA:6YS=&%N8V4@8W)E871I;VXA<'5B;&EC
M(2 A#0HA0VAA<E-E="!C;&%S<R!C871E9V]R:65S1F]R.B C9G)O;5-T<FEN
M9SHA:6YS=&%N8V4@8W)E871I;VXA<'5B;&EC(2 A#0H-"@T*#0I!<FET:&UE
M=&EC5&]K96YI>F5R(&-O;6UE;G0Z("=!<FET:&UE=&EC5&]K96YI>F5R(&ES
M(&-A<&%B;&4@;V8@<V-A;FYI;F<@*G9E<GDJ('-I;7!L90T*87)I=&AM971I
M8R!E>'!R97-S:6]N<RX@5&AE('1E<FUI;F%L('-Y;6)O;',@87)E(')E<W1R
M:6-T960@=&\-"F)E(#$@8VAA<F%C=&5R<R!W:61E+@T*#0I%>"XZ(#,J*&$K
M8BDO8R!W;W)K<PT*(" @(" -"B @(" @>" ]/2!Y(&1O97-N)R=T("TM/B C
M*"<G>"<G("<G/2<G("<G/2<G('DI#0HG(0T*#0I!<FET:&UE=&EC5&]K96YI
M>F5R(&=U:60Z("A'54E$(&9R;VU3=')I;F<Z("=[,3!$0CDX-S(M,T8T."TT
M-$,U+4(W,D$M-C%%-C8Y0D5&,T0Y?2<I(0T*#0HA07)I=&AM971I8U1O:V5N
M:7IE<B!C871E9V]R:65S1F]R0VQA<W,A56YC;&%S<VEF:65D(2 A#0HA07)I
M=&AM971I8U1O:V5N:7IE<B!C;&%S<R!M971H;V1S1F]R(0T*#0ID969A=6QT
M1&5L:6US#0I>0VAA<E-E="!F<F]M4W1R:6YG.B G*"DK+2HO("<-"B$-"@T*
M9&5F875L=$ME97!S#0I>0VAA<E-E="!F<F]M4W1R:6YG.B G*"DJ+RTK)PT*
M(2 A#0HA07)I=&AM971I8U1O:V5N:7IE<B!C;&%S<R!C871E9V]R:65S1F]R
M.B C9&5F875L=$1E;&EM<R$J+75N8VQA<W-I9FEE9"%P<FEV871E(2 A#0HA
M07)I=&AM971I8U1O:V5N:7IE<B!C;&%S<R!C871E9V]R:65S1F]R.B C9&5F
M875L=$ME97!S(2HM=6YC;&%S<VEF:65D(7!R:79A=&4A("$-"@T*( T*(D)I
B;F%R>2!';&]B86QS(B$-"@T*(E)E<V]U<F-E<R(A#0H-"@``
`
end


Reply | Threaded
Open this post in threaded view
|

Re: String Tokenization

Ernest Micklei-2
In reply to this post by Joey Gibson-2
Have a look at File>>splitPath: aString

Bye,
Ernest