Oh those pesky chunks which don’t ‘cover’ the target string (which is actually all of them except codeunit/point/char come to think of it). I should have run through a few more examples in my head before posting….
Alternative attempt: Put null into word N to -1 of S Delete codeunit (codeunitoffset(null, S) to -1 of S Return the number of chars in S + 1 The problem before was the chars which do not form part of the last chunk and remain after deletion. The above puts in a sentinel char which can be searched for to find where the requested chunk started. Second time lucky? ;) Mark. Sent from my iPhone > On 27 Jul 2023, at 21:23, Paul Dupuis via use-livecode > <use-livecode@lists.runrev.com> wrote: > > On 7/27/2023 4:31 AM, Mark Waddingham via use-livecode wrote: >>> On 2023-07-26 18:02, Paul Dupuis via use-livecode wrote: >>> If I have some text in a field, I can use the "charIndex" property (see >>> Dictionary) to obtain teh character position of the first character of a >>> chunk. >>> >>> Does anyone know of a clever way to do the equivalent of the charIndex for >>> an arbitrary chunk expression for a container/variable (i.e. not an actual >>> field object)? >> >> This should work I think: >> >> function charIndexOfWord pWordIndex, pTarget >> delete word pWordIndex to -1 of pTarget >> return the number of characters in pTarget + 1 >> end charIndexOfWord >> >> Deletion of chunks works from the first char that makes up the computed >> range, so you are left with all the characters which sit before it. >> >> The index of the character immediately before the start of the specified >> word is the just the number of characters which sit before it; and so the >> index of the first char of the specified word (which is what charIndex gives >> you in a field) is that +1. >> >> The above should work for both +ve and -ve indices, and the obvious changes >> will make it work for other string chunks (i.e. change 'Word' for <chunk>). >> > > Mark, > > Thank you very much. This was a brilliant approach and I should have thought > of it myself. However, it is not quite an accurate substitute for the > charIndex property of a field. The following example illustrates the issue: > > pTarget is [The quick brown fox jumps over the lazy dog. The lazy dog was > named "Oz".] > pWordIndex is 8 (having been derived from searching for 'lazy', the 8th word) > > Using [] to quote strings. > delete word 8 to -1 of pTarget -- deletes [lazy] to ["Oz"] but not the period > (.) at the end since it is not considered part of word -1. > This leaves pTarget as [The quick brown fox jumps over the .] > The number of characters in pTarget + 1 is actually not the position of the > [l] in [lazy], which is character 36, but the [a] in [azy], character 37, due > to the period being left. > > There are some similar issues, being off by or more, with sentences and > paragraphs in longer text. > > Thank you very much for chiming in with a good direction to try. > > Paul Dupuis > Researchware > > > _______________________________________________ > 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