Re: Numbering lines

2018-10-29 Thread Bob Sneidar via use-livecode
Next goal, trying to be magnificant. :-)

Bob S


> On Oct 28, 2018, at 21:17 , J. Landman Gay via use-livecode 
>  wrote:
> 
> Well, at least I have finally become "splendid" at something.


___
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


Re: Numbering lines

2018-10-29 Thread Alex Tweedly via use-livecode
Yeah, I said something that was wrong - and I did apologize and will 
happily do so again. And I managed to get "two people with one stone" 
and mis-describe both your and Geoff's valuable inputs.


So I apologize again to both of you, and anyone else I inadvertently 
knocked on the way past.


But, as you say, the important thing is that David got a couple of good 
answers, and anyone searching this thread in a few years time will see 
the answer, and not the human frailty of communication :-)


Alex.

On 29/10/2018 02:15, hh via use-livecode wrote:

Alex,

you and JLG are important LiveCoders. What you say has double weight.
 From that alone you should double check what you claim to be true.

Wrong assertions are no argument against a method but speed is one,
of course.

Anyway, it is fine that David G. has now a fast way to do his work.
___
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


Re: Numbering lines

2018-10-29 Thread David V Glasgow via use-livecode
Thanks to everyone who helped me on this.  Apologies if I misdirected the 
discussion, but even that was very instructive.

My mouth hung open when I saw the cost of updating the progress bar every time 
through a loop.  

I guess I have become sloppy about time saving because most operations seem 
‘quick enough’ to me …and also it seems counterintuitive that adding a 
conditional line inside the loop would speed things up.  Useful information on 
arrays too.

Cheers,

David G
___
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

Re: Numbering lines

2018-10-29 Thread hh via use-livecode
> JLG wrote:
> 
> > hh wrote:
> > Alex, 
> > you and JLG are important LiveCoders. What you say has double weight. 
> > From that alone you should double check what you claim to be true. 
> 
> Well, at least I have finally become "splendid" at something.
> 
> I can't decide whether you are being rude or just misunderstanding how
> your words appear in a different culture. To an American, the above is
> either an insult or a lecture.

The first two sentences are a praise, in every culture.

The third sentence is a simple advice, no "lecture".
If it is an insult for you (or Alex) then I deeply apologize.

Although I don't understand what's "insulting" with that.
It can't be the fact that I gave that advice: What's objectively
wrong that's wrong, no matter who said it.

> You should probably not assign so much weight to what I say here. 
> Sometimes I'm just human.

You don't really want that ...


___
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


Re: Numbering lines

2018-10-28 Thread J. Landman Gay via use-livecode

On 10/28/18 9:15 PM, hh via use-livecode wrote:

Alex,

you and JLG are important LiveCoders. What you say has double weight.
From that alone you should double check what you claim to be true.


Well, at least I have finally become "splendid" at something.

I can't decide whether you are being rude or just misunderstanding how 
your words appear in a different culture. To an American, the above is 
either an insult or a lecture.


You should probably not assign so much weight to what I say here. 
Sometimes I'm just human.


--
Jacqueline Landman Gay | jac...@hyperactivesw.com
HyperActive Software   | http://www.hyperactivesw.com

___
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


Re: Numbering lines

2018-10-28 Thread hh via use-livecode
Alex,

you and JLG are important LiveCoders. What you say has double weight.
>From that alone you should double check what you claim to be true.

Wrong assertions are no argument against a method but speed is one,
of course.

Anyway, it is fine that David G. has now a fast way to do his work.
___
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


Re: Numbering lines

2018-10-28 Thread Geoff Canyon via use-livecode
(That said, yeah, repeat for each line is going to be faster)

On Sun, Oct 28, 2018 at 5:37 PM Geoff Canyon  wrote:

>
>
> On Sun, Oct 28, 2018 at 5:27 PM Alex Tweedly via use-livecode <
> use-livecode@lists.runrev.com> wrote:
>
>> 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 "
>>
>
> We have gone wildly down a troublesome path, but for the record, I posted
> two different sets of code. The first bit was functions based on Hermann's
> original code, and retained the order given. The second code was the
> simplified and not-order-retaining version as an alternative.
>
___
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


Re: Numbering lines

2018-10-28 Thread Geoff Canyon via use-livecode
On Sun, Oct 28, 2018 at 5:27 PM Alex Tweedly via use-livecode <
use-livecode@lists.runrev.com> wrote:

> 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 "
>

We have gone wildly down a troublesome path, but for the record, I posted
two different sets of code. The first bit was functions based on Hermann's
original code, and retained the order given. The second code was the
simplified and not-order-retaining version as an alternative.
___
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


Re: Numbering lines

2018-10-28 Thread Alex Tweedly via use-livecode
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 3 times
  put "this is a medium length line that can be updated"  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  after temp
   end repeat
   put tCount && the millisecs - time1  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  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

Re: Numbering lines

2018-10-28 Thread hh via use-livecode
What's interesting with that is once again a comparison LC 6 against LC 9.

I tested with 1 lines of text (King James bible, Genesis up to 5|16) and
*non-wrapping fields*, separator tab:

LC 9.0.1  needs in average 370 ms for numbering, 330 ms for denumbering,
LC 6.7.11 needs in average 170 ms for numbering, 140 ms for denumbering.

Without field update, only the text handling, this reduces to:

LC 9.0.1  needs in average 75 ms for numbering, 75 ms for denumbering,
LC 6.7.11 needs in average 45 ms for numbering, 18 ms for denumbering.

So, LC 9 has become pretty fast, but reaches, at least with arrays and field
updates, not yet the speed of LC 6 (hardware used: Mac mini, 2.5 GHz).



___
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


Re: Numbering lines

2018-10-28 Thread hh via use-livecode
> 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


Re: Numbering lines

2018-10-28 Thread hh via use-livecode
>> David G. wrote:
>> 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.

From that previous answer I concluded you intend to index a text file, that is
to find different lines of a text and save them together with their line number
offsets in the original.

But now (after your last post) I think you want still a simple line numbering.
But this is what my handlers do:
Even if you have 1 identical lines then they are numbered, as they appear, 
from
1 up to 1. Your answer shows that you didn't even try ...
(Following the proposal of Geoff C. here once again the methods as functions:

-- 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
 
> David G. wrote:
> Thanks for this, although I’m not sure I understand.  In fact I am sure I 
> don’t.I know how amazingly fast the array method is, I use it elsewhere 
> in the same stack, and it is great. 
> 
> I also don’t understand the distinction between line numbering and indexing.  
> If I was guessing, I would go for line numbering prepends to each line in a 
> text field a number, and indexing is adding a numerical key to a database or 
> array.  The former is what I described in my original post.
> 
> The reason the issue arrises is because some of the text/chat message records 
> I referred to have the date and time stamps stripped out.  So in the 
> following exchange…
> 
> 1757  Shadowknave: U gotta b there
> 1758  What_goes_Moo: kk
> 1759  Shadowknave: no let down?
> 1760  What_goes_Moo: kk
> 1761 Shadowknave: U b there 8?
> 1762 What_goes_Moo: I wil
> 
> … lines 2 and 4 would be identical but for the line number I added via the 
> script. And of course, the integrity of the dialogue must be maintained.
> 
>  I had believed that collapsing duplicates and alphabetising are unavoidable 
> with split.  If there is an array method which doesn’t mess with the text 
> message order or content, then I would be delighted.  Is that what this is 
> below, but I haven’t appreciated it?
> 

___
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

Re: Numbering lines

2018-10-28 Thread J. Landman Gay via use-livecode
You're right, split deletes duplicates. In fact, I use it as a quick way 
to do just that.


I don't see any way to add line numbers without looking at each line. 
But you could keep a counter in a variable and put the text into an 
array with the counter integer as the key. That might be faster than 
keeping a text list. I haven't followed this thread closely, so probably 
that's already been suggested.


I think if you remove the speed hit that updates the field scroll, it 
might get fast enough.


On 10/28/18 1:14 PM, David V Glasgow via use-livecode wrote:

  I had believed that collapsing duplicates and alphabetising are unavoidable 
with split.  If there is an array method which doesn’t mess with the text 
message order or content, then I would be delighted.  Is that what this is 
below, but I haven’t appreciated it?



--
Jacqueline Landman Gay | jac...@hyperactivesw.com
HyperActive Software   | http://www.hyperactivesw.com


___
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

Re: Numbering lines

2018-10-28 Thread Alex Tweedly via use-livecode

David,

I think you are correct - there is no magic version of split or array 
that will do what you want.


You require to keep the line ordering completely unchanged - and 
Hermann's superfast method can't meet that need.


The best solution (AFAIK) will be the one Mark Hsu and/or Jacqueline 
already gave, and indeed you already tried. However, your test was 
unsuccessful, because the time spent updating the progress bar swamped 
the (relatively small) amount of actual work to be done. Without any 
progress bar updates, my aging MacBookPro does 3000 lines in 14 ms 
(lines of 50 chars each).


If you may encounter much larger data sets, then you should have a 
progress indicator of some kind.


I would say you should NEVER update a progress bar every time round a 
loop without a check against doing it too frequently.



The simple way is something like

put the millisecs into timeLastUpdated
put 50 into  kMinUpdateTime
repeat 
     do something ...
    if the millisecs - timeLastUpdated < kMinUpdateTime then
    ... update the scrollbar
    put the millisecs into timeLastUpdated
    end if
where end repeat

NB kMinUpdateTime should be adjusted depending on how important the 
updates are, and how frequently you want them I'd say rarely below 50ms 
- I'd usually use 200ms or longer.


-- Alex.

On 28/10/2018 18:14, David V Glasgow via use-livecode wrote:

Thanks for this, although I’m not sure I understand.  In fact I am sure I 
don’t.I know how amazingly fast the array method is, I use it elsewhere in 
the same stack, and it is great.

I also don’t understand the distinction between line numbering and indexing.  
If I was guessing, I would go for line numbering prepends to each line in a 
text field a number, and indexing is adding a numerical key to a database or 
array.  The former is what I described in my original post.

The reason the issue arrises is because some of the text/chat message records I 
referred to have the date and time stamps stripped out.  So in the following 
exchange…

1757Shadowknave: U gotta b there
1758What_goes_Moo: kk
1759Shadowknave: no let down?
1760What_goes_Moo: kk
1761 Shadowknave: U b there 8?
1762 What_goes_Moo: I wil

… lines 2 and 4 would be identical but for the line number I added via the 
script. And of course, the integrity of the dialogue must be maintained.

  I had believed that collapsing duplicates and alphabetising are unavoidable 
with split.  If there is an array method which doesn’t mess with the text 
message order or content, then I would be delighted.  Is that what this is 
below, but I haven’t appreciated it?

Cheers,

David G



On 28 Oct 2018, at 1:47 pm, hh via use-livecode  
wrote:


David G. wrote:
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 am not Geoff (who played with the simple array methods I suggested).
But your post attacks indirectly my suggested handlers below as wrong, as if
they would not hit your question.

My handlers (which are at least 600 times faster than your first script)
output exactly the same what your first script outputs, seen apart from the
optional delimiter.


So definitely not the result I wanted.

LOL: You mention above the "unique"-side-condition the first time...

With your new side condition from above several others (and I) know also
how this is doable very fast, once again using arrays. And it is an
invertible method, that is, the original text is exactly restorable.

But first post YOU your new handler, to see *all* your new side conditions,
that is, or to see what you really want:
Certainly not a line numbering, rather indexing a text file.


David G. wrote: [This is the first script]
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?

Geoff C. 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

Hermann H. 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 

Re: Numbering lines

2018-10-28 Thread David V Glasgow via use-livecode
Thanks for this, although I’m not sure I understand.  In fact I am sure I 
don’t.I know how amazingly fast the array method is, I use it elsewhere in 
the same stack, and it is great. 

I also don’t understand the distinction between line numbering and indexing.  
If I was guessing, I would go for line numbering prepends to each line in a 
text field a number, and indexing is adding a numerical key to a database or 
array.  The former is what I described in my original post.

The reason the issue arrises is because some of the text/chat message records I 
referred to have the date and time stamps stripped out.  So in the following 
exchange…

1757Shadowknave: U gotta b there
1758What_goes_Moo: kk
1759Shadowknave: no let down?
1760What_goes_Moo: kk
1761 Shadowknave: U b there 8?
1762 What_goes_Moo: I wil

… lines 2 and 4 would be identical but for the line number I added via the 
script. And of course, the integrity of the dialogue must be maintained.

 I had believed that collapsing duplicates and alphabetising are unavoidable 
with split.  If there is an array method which doesn’t mess with the text 
message order or content, then I would be delighted.  Is that what this is 
below, but I haven’t appreciated it?

Cheers,

David G


> On 28 Oct 2018, at 1:47 pm, hh via use-livecode 
>  wrote:
> 
>> David G. wrote:
>> 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 am not Geoff (who played with the simple array methods I suggested).
> But your post attacks indirectly my suggested handlers below as wrong, as if
> they would not hit your question. 
> 
> My handlers (which are at least 600 times faster than your first script)
> output exactly the same what your first script outputs, seen apart from the
> optional delimiter.
> 
>> So definitely not the result I wanted.
> LOL: You mention above the "unique"-side-condition the first time...
> 
> With your new side condition from above several others (and I) know also
> how this is doable very fast, once again using arrays. And it is an
> invertible method, that is, the original text is exactly restorable.
> 
> But first post YOU your new handler, to see *all* your new side conditions,
> that is, or to see what you really want:
> Certainly not a line numbering, rather indexing a text file.
> 
> David G. wrote: [This is the first script]
> 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? 
>> 
>>> Geoff C. 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
>> 
 Hermann H. 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 1 lines to add the line numbers,
 650 ms for 1 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
  

Re: Numbering lines

2018-10-28 Thread hh via use-livecode
> David G. wrote:
> 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 am not Geoff (who played with the simple array methods I suggested).
But your post attacks indirectly my suggested handlers below as wrong, as if
they would not hit your question. 

My handlers (which are at least 600 times faster than your first script)
output exactly the same what your first script outputs, seen apart from the
optional delimiter.

> So definitely not the result I wanted.
LOL: You mention above the "unique"-side-condition the first time...

With your new side condition from above several others (and I) know also
how this is doable very fast, once again using arrays. And it is an
invertible method, that is, the original text is exactly restorable.

But first post YOU your new handler, to see *all* your new side conditions,
that is, or to see what you really want:
Certainly not a line numbering, rather indexing a text file.

> >>> David G. wrote: [This is the first script]
> >>> 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? 
> 
>> Geoff C. 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
> 
>>> Hermann H. 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 1 lines to add the line numbers,
>>> 650 ms for 1 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

___
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

Re: Numbering lines

2018-10-28 Thread David V Glasgow via use-livecode
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 
>  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  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  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@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 1 lines to add the line numbers,
 650 ms for 1 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:
>>>  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

Re: Numbering lines

2018-10-27 Thread Geoff Canyon via use-livecode
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  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  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@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 1 lines to add the line numbers,
>>> 650 ms for 1 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:
>>> > >>  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 

Re: Numbering lines

2018-10-27 Thread Geoff Canyon via use-livecode
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  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@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 1 lines to add the line numbers,
>> 650 ms for 1 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:
>> > >>  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? 

Re: Numbering lines

2018-10-27 Thread Geoff Canyon via use-livecode
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@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 1 lines to add the line numbers,
> 650 ms for 1 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:
> > >>  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@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
___

Re: Numbering lines

2018-10-27 Thread hh via use-livecode
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 1 lines to add the line numbers,
650 ms for 1 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: 
> >>  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@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Re: Numbering lines

2018-10-27 Thread J. Landman Gay via use-livecode
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.


--
Jacqueline Landman Gay | jac...@hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
On October 27, 2018 10:49:30 AM David V Glasgow via use-livecode 
 wrote:


Thanks Mark.  What you said makes sense, but when I actually  tested it, 
your routine is about the same as  mine - 3200 lines in 106 seconds (on my 
fairly old MacBook).


Cheers,

David G

On 26 Oct 2018, at 6:41 pm, Mark Hsu via use-livecode 
 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"

- Mark Hsu



On Oct 26, 2018, at 10:27 AM, David V Glasgow via use-livecode 
 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?



Best Wishes,
David Glasgow


 

 

___
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

Re: Numbering lines

2018-10-27 Thread David V Glasgow via use-livecode
Thanks Mark.  What you said makes sense, but when I actually  tested it, your 
routine is about the same as  mine - 3200 lines in 106 seconds (on my fairly 
old MacBook).

Cheers,

David G

> On 26 Oct 2018, at 6:41 pm, Mark Hsu via use-livecode 
>  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"
> 
> - Mark Hsu
> 
> 
> 
>> On Oct 26, 2018, at 10:27 AM, David V Glasgow via use-livecode 
>>  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?
>> 
>> 
>> Best Wishes,
>> David Glasgow
>> 
>> 
>>  
>> 
>>  
>> 
>> ___
>> 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

Re: Numbering lines

2018-10-26 Thread Mark Hsu via use-livecode
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"

- Mark Hsu



> On Oct 26, 2018, at 10:27 AM, David V Glasgow via use-livecode 
>  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?
> 
> 
> Best Wishes,
> David Glasgow
> 
> 
>  
> 
>  
> 
> ___
> 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

Numbering lines

2018-10-26 Thread David V Glasgow via use-livecode
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?


Best Wishes,
David Glasgow


  

  
 
___
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