Numbering lines

Geoff Canyon gcanyon at gmail.com
Sat Oct 27 20:27:57 EDT 2018


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



More information about the use-livecode mailing list