Alex, Thanks for that.
Disbelieving soul that I am (sorry), I puzzled for a while over the results of these two versions. on mouseup put empty into msg put "abc" & CR & "def" & CR & "ghi" & CR into t repeat for each line L in t put the number of chars in L && L &CR after msg if L = "abc" then put "x" into line 2 of t put "y" into line 3 of t end if end repeat end mouseup [no final CR on original t] on mouseup put empty into msg put "abc" & CR & "def" & CR & "ghi" into t repeat for each line L in t put the number of chars in L && L &CR after msg if L = "abc" then put "x" into line 2 of t put "y" into line 3 of t end if end repeat end mouseup I had to use a pencil and paper to track what was in t and what the engine was referring to after the "x" and "y" inserts. Then it became clear. I feel a better person. Cheers Dave > On 16 Feb 2015, at 23:08, Alex Tweedly <a...@tweedly.net> wrote: > That's not quite correct. It doesn't do a single initial complete scan of the > whole variable and keep all the pointers. What it does is (more like) keep > track of how far it has currently processed, and then when it needs the next > line, it scans from that remembered position forward until the next CR - and > then remembers that as the current position. (Oh, and btw, it does remember > how many chars were in the initial value, and uses that). > > The fact that it does incremental scan rather than one initial scan can be > seen from the following (totally useless :-) bit of code : > > on mouseup > put "abc" & CR & "def" & CR & "ghi" & CR into t > repeat for each line L in t > put the number of chars in L && L &CR after msg > if L = "abc" then > put "x" into line 2 of t > put "qwert" after line 3 of t > end if > end repeat > end mouseup > > An initial scan would have produced : > 3 abc > 3 x > g > 3 ijq > > But we actually get: > 3 abc > 1 x > 6 ghiqwe > > It is significant that it doesn't do a complete scan, because that would be a > cost penalty at the start of the loop, and so could make it unnecessarily > expensive to do some operations. Again that can be seen from the following > (take out of context) snippet of not quite real code .... > > put "millions and millions of lines of data" into tVar > repeat for each line L in tvar > if some condition then exit repeat > end repeat > > If there were an initial scan, then you would do that whole costly scan even > though you could actually exit the loop very early; because it's an > incremental scan, you don't need to worry about that (so long as you are sure > you will exit soon). > > -- Alex. _______________________________________________ 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