comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: splitting difficult(?) strings
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: splitting difficult(?) strings [message #28730] Wed, 09 January 2002 09:46 Go to previous message
hradilv is currently offline  hradilv
Messages: 4
Registered: January 2002
Junior Member
I got something easier that makes some assumptions. Namely that all
string delimiters are paired. It's based on the getstr() function
that I found on the web (JHU?)

First I check to see if there is a " in the string. If not then I
just use strsplit(), else I use getdstring() [get delimited
string(s)]:

function getdstring, txt, delimiter=delimiter

if n_elements(delimiter) eq 0 then d='"' else d=delimiter

idx = where( byte(txt) eq (byte(d))[0], cnt )
if cnt eq 0 then return, ''

lo = idx[2*lindgen(cnt/2)]
hi = idx[2*lindgen(cnt/2)+1]

return, strmid(txt,lo+1,hi-lo-1)
end

PS: I especially like the 'byte trick' and the fact that strmid()
accepts and returns arrays. These are the simple things that really
make my day 8^)

"Martin Downing" <martin.downing@ntlworld.com> wrote in message news:<nNK_7.14521$6q2.3132910@news2-win.server.ntlworld.com>...
> "Craig Markwardt" <craigmnet@cow.physics.wisc.edu> wrote in message
> news:onr8p0k4se.fsf@cow.physics.wisc.edu...
>>
>> hradilv.nospam@yahoo.com writes:
>>
>>> Any ideas on what would be the easiest (best?) way to split strings
>>> that have the following characteristics? Perhaps best understood by
>>> looking at examples?
>>>
>>> 1)
>>> buf= '4 5 6'
>>> strsplit(buf,' ',/extract) yields ['4','5','6'] {good}
> ...
>>> Maybe I can summarize: I would like something that will split the
>>> string by spaces, PROTECTED by "s. ie there may be spaces within the
>>> "s which should not cause a split.
>>
>> Using STRSPLIT is like sending a boy to do a man's job. I think there
>> is no other choice but to hand-code what you want. [ Counter-examples
>> welcomed. ] It *may* be possible to code it into a regular
>> expression, but I'm not sure how to handle the "quotes-optional"
>> aspect.
>>
>
> Hi Vince, this works for your examples:
>
> ---------------
> FUNCTION vince_sep, s
>
> IF strpos(s, '"') NE -1 THEN BEGIN
> sa = strsplit(s, '^"|" "|"$', /EXTRACT,/REGEX, /PRESERVE_NULL)
> n = n_elements(sa)
> IF n GT 2 THEN sa = sa[1:n-2]
> ENDIF ELSE BEGIN
> sa = strsplit(s,' ', /EXTRACT)
> ENDELSE
> return, sa
>
> END
> -----------------
>
>
>
> cheers
>
> Martin
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: IDl 5.3.1 on windows 2000
Next Topic: Re: IDL data coordinates in a widget

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 06:05:59 PDT 2025

Total time taken to generate the page: 1.03859 seconds