Hi Gregg,

On Tuesday, January 18, 2005, 9:02:32 PM, you wrote:

GI>     find-Nth: func [
GI>         "Returns the series at occurrence N of value or none."
GI>         series [series!]
GI>         value
GI>         n      [integer!]
GI>         /local count pos
GI>     ][
GI>         count: 0
GI>         parse series [
GI>             some [
GI>                 to value pos: (
GI>                    count: count + 1
GI>                    if count = n [return pos]
GI>                 ) skip
GI>             ]
GI>         ]
GI>         none
GI>     ]

  find-nth: func [
      "Returns the series at occurrence N of value or none."
      series [series!]
      value
      n      [integer!]

      /local pos
  ] [
      if n = 1 [return find series :value]
      n: n - 1
      parse series [
          n thru value to value pos:
      ]
      pos
  ]

>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 1
== "*bbb*ccc*ddd*eee*fff"
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 2
== "*ccc*ddd*eee*fff"
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 3
== "*ddd*eee*fff"
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 4
== "*eee*fff"
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 5
== "*fff"
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 6
== none
>> find-nth "aaa*bbb*ccc*ddd*eee*fff" "*" 7
== none

(Though I hoped that the IF N = 1 was not needed... :)

If the value is just a character, you can simplify things out:

  find-nth: func [
      "Returns the series at occurrence N of value or none."
      series [any-string!]
      value  [char!]
      n      [integer!]

      /local pos
  ] [
      parse series [
          n thru value pos: (pos: back pos)
      ]
      pos
  ]

Regards,
   Gabriele.
-- 
Gabriele Santilli <[EMAIL PROTECTED]>  --  REBOL Programmer
Amiga Group Italia sez. L'Aquila  ---   SOON: http://www.rebol.it/

-- 
To unsubscribe from the list, just send an email to rebol-request
at rebol.com with unsubscribe as the subject.

Reply via email to