Re: Turning a Text Sequence into a Sequence Array
- Posted by jimcbrown (admin) Jul 14, 2010
- 3276 views
DanM said...
Kaladan said...
Okay, thanks! I've always been wary of betas, but I'll give it a go! Thank you very much!
I have a version of split() that works as far back as Euphora 2.2, if you prefer to use an older version of Euphoria until 4.0 is out of beta.
-- (c) Copyright - See License.txt -- global function find_from(object delim, sequence st, integer start) integer ret ret = find(delim, st[start..length(st)]) if ret then ret = ret + start - 1 end if return ret end function global function match_from(object delim, sequence st, integer start) integer ret ret = match(delim, st[start..length(st)]) if ret then ret = ret + start - 1 end if return ret end function global function split_with_limits(object delim, sequence st, integer limit, integer no_empty) sequence ret integer start integer pos integer k ret = {} if length(st) = 0 then return ret end if if sequence(delim) then -- Handle the simple case of split("", "123"), opposite is join({"1","2","3"}, "") -- "123" if equal(delim, "") then for i = 1 to length(st) do st[i] = {st[i]} limit -= 1 if limit = 0 then st = append(st[1 .. i],st[i+1 .. length(st)]) exit end if end for return st end if start = 1 while start <= length(st) do pos = match_from(delim, st, start) if pos = 0 then exit end if ret = append(ret, st[start..pos-1]) start = pos+length(delim) limit -= 1 if limit = 0 then exit end if end while else start = 1 while start <= length(st) do pos = find_from(delim, st, start) if pos = 0 then exit end if ret = append(ret, st[start..pos-1]) start = pos + 1 limit -= 1 if limit = 0 then exit end if end while end if ret = append(ret, st[start..length(st)]) k = length(ret) if no_empty then k = 0 for i = 1 to length(ret) do if length(ret[i]) != 0 then k += 1 if k != i then ret[k] = ret[i] end if end if end for end if if k < length(ret) then return ret[1 .. k] else return ret end if end function global function split(object delim, sequence st) return split_with_limits(delim, st, 0, 0) end function object result result = split(" ", "John Middle Doe") for i = 1 to length(result) do puts(1, "|"&result[i]&"|\n") end for