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@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@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@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@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@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@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@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@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@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
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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