Numbering lines
David V Glasgow
dvglasgow at gmail.com
Sun Oct 28 14:14:39 EDT 2018
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?
Cheers,
David G
> On 28 Oct 2018, at 1:47 pm, hh via use-livecode <use-livecode at lists.runrev.com> 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 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
>
> _______________________________________________
> 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