1. Re: split() function
- Posted by Pete Eberlein <xseal at HARBORSIDE.COM>
May 03, 2000
-
Last edited May 04, 2000
Be careful what you wish for, you just might get it... without comments, of
course
function split(sequence s, integer c)
sequence result
integer index, next
result = {}
index = 1
next = find(c, s)
while next do
result = append(result, s[index..index+next-2])
index += next
next = find(c, s[index..length(s)])
end while
result = append(result, s[index..length(s)])
return result
end function
procedure smart_print_recursive(object o)
if sequence(o) then
if equal(repeat(1, length(o)), o >= ' ' and o <= 255) then
printf(1, "\"%s\"", {o})
else
puts(1, "{ ")
for i = 1 to length(o) do
smart_print_recursive(o[i])
if (i < length(o)) then puts(1, ", ") end if
end for
puts(1, " }")
end if
else
printf(1, "%g", {o})
end if
end procedure
procedure smart_print(object o)
smart_print_recursive(o)
puts(1, "\n")
end procedure
smart_print( split("|two|three|four|five", '|') )
smart_print( split("one|||five", '|') )
smart_print( split("one|two|three|four|", '|') )
-- Pete
On Wed, 3 May 2000 18:57:47 -0400, David Garcia <donovan at ABS.NET> wrote:
>No Solution wrote:
>
>> That's the most more what i had in mind, but i was too lazy to code
>> something like that, and at the time i wrote the function i only needed
to
>> use 1 character so..
>
>I still haven't seen a solution to this which correctly handles the
following
>boundary conditions:
>
>(for these examples, the pipe character is the delimiter, and we expect to
>return a sequence of sequences )
>
>1) null string in front of the first delimiter.
>
>"|two|three|four|five" should return { {}, "two", "three", "four",
"five" }
>
>2) adjacent delimiters with null string between them.
>
>"one|||five" should return { "one", {}, {}, {}, "five" }
>
>3) sequence ending in a delimiter.
>
>"one|two|three|four|" should return { "one", "two", "three", "four", {}
}