Numbering lines

David V Glasgow dvglasgow at gmail.com
Sun Oct 28 08:26:06 EDT 2018


Thanks Geoff, I did play with Split, but one of the reasons for numbering is to make any identical lines unique.  With split, for any that are not, all but one is deleted.  So definitely not the result I wanted.

I’ll sacrifice the progress bar and see where that leaves me.

Thanks folks.

> On 28 Oct 2018, at 1:32 am, Geoff Canyon via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> And of course if retaining the order isn't critical you could just go with:
> 
> function numberText T,D
>   split T by cr
>   combine T by cr and D
>   return T
> end numberText
> 
> function unNumberText T,D
>   split T by cr and D
>   combine T by cr
>   return T
> end unNumberText
> 
> On Sat, Oct 27, 2018 at 5:29 PM Geoff Canyon <gcanyon at gmail.com> wrote:
> 
>> Sorry, missed a delimiter reference:
>> 
>> function numberText T,D
>>   split T by return
>>   put "1" & D & T[1] into R
>>   repeat with K = 2 to item 2 of the extents of T
>>      put cr & K & D & T[K] after R --> change separator here
>>   end repeat
>>   return R
>> end numberText
>> 
>> On Sat, Oct 27, 2018 at 5:27 PM Geoff Canyon <gcanyon at gmail.com> wrote:
>> 
>>> Converted to functions with the text and delimiter as paramaters for ease
>>> of use:
>>> 
>>> -- Add "inline line numbers" [-hh fecit, 2014]
>>> function numberText T,D
>>>   split T by return
>>>   put "1:" && T[1] into R
>>>   repeat with K = 2 to item 2 of the extents of T
>>>      put cr & K & D & T[K] after R
>>>   end repeat
>>>   return R
>>> end numberText
>>> 
>>> -- Remove "inline line numbers" [-hh fecit, 2014]
>>> function unNumberText T,D
>>>   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 R
>>>   end repeat
>>>   return char 2 to -1 of R
>>> end unNumberText
>>> 
>>> 
>>> 
>>> On Sat, Oct 27, 2018 at 11:54 AM hh via use-livecode <
>>> use-livecode at lists.runrev.com> wrote:
>>> 
>>>> 1. Besides removing scroll-update, which takes most of the time, you
>>>> could
>>>> try the following array-methods (which are essentially from my stack
>>>> http://forums.livecode.com/viewtopic.php?p=101301#p101301 , see there
>>>> card "LineNums, tab "Nb2").
>>>> 
>>>> This needs here on a medium fast machine (Mac mini, 2.5GHz) in average
>>>> with LC 9.0.1 (which is at about 30% faster than LC 8.1.10 with that):
>>>> 
>>>> 680 ms for 10000 lines to add the line numbers,
>>>> 650 ms for 10000 lines to remove the line numbers,
>>>> both incl. the field update (a lot of long lines are to break).
>>>> 
>>>> -- Add "inline line numbers" [-hh fecit, 2014]
>>>> -- Uses separator ": " (In LC 6 use one single char, remove below needs
>>>> that)
>>>> on mouseUp
>>>>  lock screen; lock messages
>>>>  put the millisecs into m1
>>>>  set cursor to watch
>>>>  put fld "IN" into 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 & ": " & T[L] after S --> change separator here
>>>>  end repeat
>>>>  set text of fld "OUT" to char 2 to -1 of S
>>>>  put -1+the num of lines of S & " lines: " & \
>>>>        the millisecs -m1 & " ms" into fld "timing"
>>>> end mouseUp
>>>> 
>>>> -- Remove "inline line numbers" [-hh fecit, 2014]
>>>> -- Uses separator ": " (the above, in LC 6 you have to use one single
>>>> char)
>>>> on mouseUp
>>>>  lock screen; lock messages
>>>>  put the millisecs into m1
>>>>  set cursor to watch
>>>>  put the text of fld "OUT" into S
>>>>  split S by return and ": " --> change separator here
>>>>  put the keys of S into K
>>>>  sort K numeric
>>>>  repeat for each line L in K
>>>>    put cr & S[L] after T
>>>>  end repeat
>>>>  put char 2 to -1 of T into fld "IN2"
>>>>  put -1+the num of lines of T & " lines: " & \
>>>>        the millisecs -m1 & " ms : " & (fld "IN2" is fld "IN") into fld
>>>> "timing"
>>>> end mouseUp
>>>> 
>>>> 2. All "big" editors that show line numbers never update the whole long
>>>> text
>>>> ** but only a few lines more than the visible line range **. Using that,
>>>> nearly
>>>> every LCS method (that locks the screen (and messages)) will be fast
>>>> enough.
>>>> 
>>>>> JLG wrote:
>>>>> Another issue may be the line that updates the scrollbar. Try
>>>> commenting out
>>>>> that line as a test just to see if that's the problem. If so, you
>>>> might opt
>>>>> for a spinner or progress bar instead.
>>>>> 
>>>>>> David Glasgow wrote:
>>>>>> your routine is about the same as mine - 3200 lines in 106 seconds
>>>> (on my
>>>>>> fairly old MacBook).
>>>>>>> Mark Hsu wrote:
>>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>> 
>>>>>>> I think your issue is where you say “put tcount & j into line
>>>> tcount of it”
>>>>>>> — The line X of … call is very slow as it has to count every line
>>>> from 1 - X.
>>>>>>> try this:
>>>>>>> 
>>>>>>> local tBuffer
>>>>>>> put 1 into tCount
>>>>>>> repeat for each line j in pText
>>>>>>> put tCount & j & lf after tBuffer
>>>>>>> add 1 to tCount
>>>>>>> set the thumbpos of scrollbar “filterprog” to tCount
>>>>>>> end repeat
>>>>>>> delete line -1 of tBuffer
>>>>>>> put tBuffer into pText //If you want to update the initial variable
>>>> with
>>>>>>> the numbered lines
>>>>>>> put tBuffer into field “numberedtext"
>>>>>>>> David V Glasgow  wrote:
>>>>>>>> 
>>>>>>>> Hello folks
>>>>>>>> 
>>>>>>>> I am doing a content analysis of online chat and messaging.
>>>> Sometimes very
>>>>>>>> large files, thousands or even hundreds of thousands of messages.
>>>> I am
>>>>>>>> finding filter and find to be delightfully fast.
>>>>>>>> 
>>>>>>>> However…. Sometimes I want to prefix each line with the line
>>>> number, and do
>>>>>>>> this:
>>>>>>>> 
>>>>>>>> put 1 into tcount
>>>>>>>> repeat for each line j in it
>>>>>>>> put tcount & j into line tcount of it
>>>>>>>> put tcount + 1 into tcount
>>>>>>>> set the thumbpos of scrollbar "filterprog" to tcount
>>>>>>>> end repeat
>>>>>>>> put it into field “numberedtext”
>>>>>>>> 
>>>>>>>> I use ‘it’ because of a dim memory (superstition? Myth?) from long
>>>> ago that
>>>>>>>> it is faster than an arbitrarily named variable. Still, the whole
>>>> process
>>>>>>>> is pretty darned slow. Any brilliant suggestions?
>>>> 
>>>> _______________________________________________
>>>> 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