My apologies Hermann. I had not been following the original thread closely, and got confused by the embedded quoting in the later messages. I was looking at Geoff's code - not yours - and he explicitly said "

And of course if retaining the order isn't critical "


So I agree your array method does indeed work properly. However, it is rather 'splendidly' slow compared to the simpler method as recommended by Mark H and myself :-); it takes almost twice as long on my test cases (between 30,000 and 300,000 lines of moderate length, highly repetitive, 9.0.0, Mac Book Pro circa 2011).
Full code below ....

-- Alex
on mouseUp
   local tData1, tData2, time1, temp, tText
   repeat 30000 times
      put "this is a medium length line that can be updated" &CR after tText
   end repeat

   local tWith
   put prependLineNumbers(tText) into tWith
   put prependLineNumbers2(tText) into tWith

   --   put prependLineNumbersProgress(tText) into tWith

end mouseup
function prependLineNumbers pText
   local timeLastUpdated, time1, time2, temp
   local tCount
   put the number of lines in pText into tCount
   put the millisecs into time1
   local I
   repeat for each line L in pText
      add 1 to I
      put I && L &CR after temp
   end repeat
   put tCount && the millisecs - time1 &CR after msg
   return temp
end prependLineNumbers

function prependLineNumbers2 pText
   local timeLastUpdated, time1, time2, temp
   local tCount, S, K
   put the number of lines in pText into tCount
   put the millisecs into time1

   split pText by return
   put the keys of pText into K
   sort K numeric
   repeat for each line L in K
      put cr & L && pText[L] after S --> change separator here
   end repeat

   put tCount && the millisecs - time1 &CR after msg
   return char 2 to -1 of S
end prependLineNumbers2



On 28/10/2018 20:06, hh via use-livecode wrote:
Alex T. wrote:
You require to keep the line ordering completely unchanged -
and Hermann's superfast method can't meet that need.
JLG wrote:
You're right, split deletes duplicates. In fact, I use it as a quick way
to do just that.
You are both spendidly wrong:
Could you please simply try my functions and read the dictionary in order
to understand why you are wrong? Please!

Is it not yet Halloween ...

-- D is the separator for numbers and text lines, usually space or ": "
-- T is the input text, delimited with return
-- prepends the number and separator to each line:
function addLineNumbers D,T
   split T by return
   put the keys of T into K
   sort K numeric
   repeat for each line L in K
     put cr & L & D & T[L] after S
   end repeat
   return char 2 to -1 of S
end addLineNumbers

-- D is the separator for numbers and text lines, usually space or ": "
-- T is the input text, delimited with return
-- removes the number and separator from each line:
function removeLineNumbers D,T
   split T by return and D
   put the keys of T into K
   sort K numeric
   repeat for each line L in K
     put cr & T[L] after S
   end repeat
   return char 2 to -1 of S
end removeLineNumbers




_______________________________________________
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

Reply via email to