Perfect, thanks Devin - I was hoping to see ‘offsets’ in the docs under 
‘offset’, so this will do nicely! :-)
Best,
Keith   

> On 29 Oct 2018, at 15:49, Devin Asay via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> On Oct 29, 2018, at 9:32 AM, Keith Clarke via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
>> 
>> Folks,
>> Is there a simple way to find the offset of a character from the ‘right’ end 
>> of a string, rather than the beginning - or alternatively get a list of all 
>> occurrences?
>> 
>> I’m trying to separate paths & pages from a list of URLs and so looking to 
>> identify the position of the last ‘/‘ character.
>> 
>> Thanks & regards,
>> Keith
> 
> 
> There was a discussion on this topic on the list a few years ago, and I saved 
> these functions in my script library:
> 
> From Peter Brigham:
> These are utility functions I use constantly for text processing. 
> Offsets(str,cntr) returns a comma-delimited list of all the offsets of str in 
> ctnr. Lineoffsets(str,cntr) does the same with lineoffsets. Then you can 
> interate over the list of offsets to do whatever you want to each instance of 
> str in cntr. I keep them in a utility stack that is in the stackinuse, so it 
> is available to all stacks. I don't use regex, as I have never gotten the 
> regex syntax to stick in my head firmly enough to find it natural, and in any 
> case doing it by script turns out to be as fast or faster.
> 
> Peter's lineOffsets function returns a line number for each found char 
> offset. I added a function that returns only unique line numbers.
> 
> function offsets str,cntr
>    -- returns a comma-delimited list of
>    -- all the offsets of str in cntr
>    put "" into oList
>    put 0 into startPoint
>    repeat
>        put offset(str,cntr,startPoint) into os
>        if os = 0 then exit repeat
>        add os to startPoint
>        put startPoint & "," after oList
>    end repeat
>    if oList = "" then return "0"
>    return item 1 to -1 of oList
> end offsets
> 
> function lineOffsetsAll str,cntr
>    -- returns a comma-delimited list of
>    -- all the lineoffsets of str in cntr
>    # (returns a line number for ALL instances)
>    put offsets(str,cntr) into charList
>    if charList = "0" then return "0"
>    put the number of items of charList into nbr
>    put "" into oList
>    repeat for each item n in charList
>        put the number of lines of (char 1 to n of cntr) \
>                & "," after oList
>    end repeat
>    return item 1 to -1 of oList
> end lineOffsetsAll
> 
> # added by Devin Asay
> function lineOffsets pStr,pSearchTxt
>    # (returns only unique line numbers)
>    put empty into tList
>    put 0 into tStartLine
>    repeat 
>        put lineOffset(pStr,pSearchTxt,tStartLine) into tLineNum
>        if tLineNum = 0 then exit repeat
>        add tLineNum to tStartLine
>        put tStartLine & "," after tList
>    end repeat
>    if tList is empty then return "0"
>    return item 1 to -1 of tList
> end lineOffsets
> 
> Hope this helps.
> 
> Devin
> 
> Devin Asay
> Director
> Office of Digital Humanities
> Brigham Young University
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to