Is it possible to use a reverse direction for offset

Alex Tweedly alex at tweedly.net
Thu Mar 23 15:34:48 EDT 2023


Oh dear - replying to myself again :-)

The 'itemDel' method still does the long search through the text - even 
though it does it at engine speed, and in neat tidy looking script.

But, re-reading your earlier description, it occurred to me that (maybe) 
you are doing lots of different processing on the same bit of text. If 
that is the case, then it may be worth doing a single "reverse" 
operation at the start, and then doing everything as a 'forward' search.

i.e.

put the number of chars in tText into K
put reverse(tText) into tRevText

to find the enclosing strings from position 'm', we would do

put offset(tClosingSting, tText, m) into t2
put K - offset( reverse(tOpeningString), tRevText, K-m) into t1

.... text you need is in char t1 to t2 of tText

Should give you quick searches  -  IF you repeatedly process the same text.

Alex.

P.S.  quickest 'reverse' function ?

Might be

put the number of chars in tText into K
put K into N
repeat for each char c in tText
    put c into tRev[N]
    subtract 1 from N
end repeat
combine tRev with empty

Alex.



On 23/03/2023 19:03, Alex Tweedly via use-livecode wrote:
> OK, I may be going in the wrong direction here, but ....
>
> put (the opening string) into temp
> set the itemDelimeter to temp
> put the number of chars in item 1 to -2 of theWholeText into theAnswer
>
> ??
>
> Alex.
>
> On 23/03/2023 17:24, François via use-livecode wrote:
>> Yes, this is the big picture.
>>
>> Plus, some environments may live within other environments.
>>
>> And yes, one of the things the app does all the time is finding 
>> matched opening strings and closing strings, like finding matched 
>> parentheses in a programming language.
>>
>> Fun, as you said!
>> François
>>
>>> Le 23 mars 2023 à 18:17, Craig Newman via use-livecode 
>>> <use-livecode at lists.runrev.com> a écrit :
>>>
>>> Fun, fun…
>>>
>>> So if you collect ALL the opening and closing strings, and hopefully 
>>> these never overlap, then each pair can be “ordered”. Now 
>>> identifying each is just a matter of thinking in terms of “pairs” of 
>>> offsets. You can then identify each by their “paired” position in 
>>> the forward direction.
>>>
>>> Or am i missing it still?
>>>
>>> Craig
>>>
>>>> On Mar 23, 2023, at 12:29 PM, François via use-livecode 
>>>> <use-livecode at lists.runrev.com> wrote:
>>>>
>>>> An example of when a backwards search would be useful is the 
>>>> following:
>>>>
>>>> In the app, you have to find command environments. Environments are 
>>>> delimited by an opening string and a closing string.
>>>>
>>>> Usually, I search forward for the opening string, then search for 
>>>> the closing string afterwards. Once this occurrence is processed, 
>>>> the app goes on with a forward search.
>>>>
>>>> Now another problem: I want to see in which environment a text 
>>>> position is in, i.e. finding the enclosing opening and closing 
>>>> strings.
>>>>
>>>> Looking for the closing string is a no brainer. Looking for the 
>>>> opening string is no more difficult if I can do a backwards search.
>>>>
>>>> However, if I can only search forward, I must start the search at 
>>>> the beginning of the text to scan all the occurrences of the 
>>>> opening string that stand before the text position (if any). The 
>>>> complexity of this approach is not the same as in the case where a 
>>>> backwards search is available.
>>>>
>>>> François
>>>>
>>>>> Le 23 mars 2023 à 16:48, Craig Newman via use-livecode 
>>>>> <use-livecode at lists.runrev.com> a écrit :
>>>>>
>>>>> Francois.
>>>>>
>>>>> I am sure you know what you have and what you need.
>>>>>
>>>>> But just for my curiosity, if I had to do what you want, I would 
>>>>> have used the “offset” function and its “charsToSkip” parameter to 
>>>>> find all instances of the text to find, and then use those values 
>>>>> in sequence to work backwards. But then how do you know when to stop?
>>>>>
>>>>> Craig
>>>>>
>>>>>> On Mar 23, 2023, at 11:30 AM, François via use-livecode 
>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>
>>>>>> The text source is not very big.
>>>>>>
>>>>>> However I implement transcoding from one language to another and 
>>>>>> I do an VERY large amount of search and replace.
>>>>>>
>>>>>> I think I have quite optimized my LC code but transcoding can 
>>>>>> take 5 minutes to do, and I need the whole process to chase 
>>>>>> unexpected bugs. This is using the forward search (offset) most 
>>>>>> of the time.
>>>>>>
>>>>>> Using a standalone app takes the time down to 4 minutes, which is 
>>>>>> not a sufficient gain for my usage.
>>>>>>
>>>>>> François
>>>>>>
>>>>>>> Le 23 mars 2023 à 16:21, Craig Newman via use-livecode 
>>>>>>> <use-livecode at lists.runrev.com> a écrit :
>>>>>>>
>>>>>>> Francois.
>>>>>>>
>>>>>>> Who wouldn’t?
>>>>>>>
>>>>>>> But unless you are working with VERY large datasets, I bet a 
>>>>>>> handler would process quickly.
>>>>>>>
>>>>>>> Craig
>>>>>>>
>>>>>>>> On Mar 23, 2023, at 10:58 AM, François via use-livecode 
>>>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>>>
>>>>>>>> @Ben
>>>>>>>>
>>>>>>>> Too bad…
>>>>>>>>
>>>>>>>> @ Craig
>>>>>>>>
>>>>>>>> I would rather have an optimized version, I do a lot of text 
>>>>>>>> processing in my app.
>>>>>>>>
>>>>>>>> Thanks to both of you!
>>>>>>>> François
>>>>>>>>
>>>>>>>>> Le 23 mars 2023 à 14:43, Craig Newman via use-livecode 
>>>>>>>>> <use-livecode at lists.runrev.com> a écrit :
>>>>>>>>>
>>>>>>>>> @Ben.
>>>>>>>>>
>>>>>>>>> 20 years! Congratulations!.
>>>>>>>>>
>>>>>>>>> @Francois
>>>>>>>>>
>>>>>>>>> This can be scripted easily. Do you need help with that?
>>>>>>>>>
>>>>>>>>> Craig
>>>>>>>>>
>>>>>>>>>> On Mar 23, 2023, at 8:21 AM, Ben Rubinstein via use-livecode 
>>>>>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>>>>>
>>>>>>>>>> https://quality.livecode.com/show_bug.cgi?id=584 (20th 
>>>>>>>>>> anniversary this September!)
>>>>>>>>>>
>>>>>>>>>> Also
>>>>>>>>>> https://quality.livecode.com/show_bug.cgi?id=8353
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 23/03/2023 11:35, François via use-livecode wrote:
>>>>>>>>>>> I would like to search for a string within another string, 
>>>>>>>>>>> starting at a given position, but backward.
>>>>>>>>>>> In some languages, you can achieve that by providing a 
>>>>>>>>>>> negative number for the initial position of the search.
>>>>>>>>>>> Is this possible in LiveCode?
>>>>>>>>>>> TIA
>>>>>>>>>>> François
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> 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
>>>>>>>>>> _______________________________________________
>>>>>>>>>> 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
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> 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
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> 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
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>
>>>> _______________________________________________
>>>> 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
>>> _______________________________________________
>>> 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
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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