charIndex property

Mark Waddingham mark at livecode.com
Thu Jul 27 17:06:17 EDT 2023


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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list