Counting Chars by ASCI Values

Mark Smith mark at maseurope.net
Wed Mar 1 12:34:49 EST 2006


Jim's solution seems the best, but if the data is big, then the  
'number of items in (textStr & null)' seems to slow things down - I  
guess that textStr is being copied with the null char appended, and  
if it's big, that's a lot of work. I think it's therefore more  
efficient to test for char -1 of textStr being the char tested for,  
and if it is, then add 1 to the count. Also, shouldn't the count be  
'the number of items in textStr -1?

so I ended up with this:

on yetAnotherWay
   put fld 1 into tString
   repeat with n = 1 to 30
     if (n >= 10 AND n <=12) OR n = 29  then next repeat
     set the itemDelimiter to numToChar(n)
     put the number of items in tString -1 into tCount
     if char -1 of tString is numToChar(n) then add 1 to tCount
     put n & tab & tCount & cr after tList
   end repeat
   put tList into fld "chars"
end yetAnotherWay

this was just about twice as fast as "textStr & null" with 3  
megabytes of data.


Mark

On 1 Mar 2006, at 15:25, Jim Ault wrote:

> On 3/1/06 5:08 AM, "Cubist at aol.com" <Cubist at aol.com> wrote:
>
>>
>> In a message dated 2/28/06 6:20:02 PM, Todd Geist
>> <tg.lists at geistinteractive.com> writes:
>>> I need to count the number of times a Character occurs in text
>>> string. The character will be high or Low ASCII.  SO I need to input
>>> the value as an ASCII value.
>>>
>>> Anybody have any scripts that can get me started?
>>    The replies you've gotten thus far have used loops to  
>> explicitly count the
>> occurences of whatever-character-it-is. Here's a different way to  
>> do it,
>> using the "replace" function, which could be faster:
>>
>
> Actually, my original post used the following technique:
>
> set the itemDel to "¹"
> get the number of items in (textStr & null)
>
> which does not require a repeat loop or replace or a function or
> establishing more variables.
>
> One post was done to show the precaution of counting any container for
> words, items, lines where the last to be counted was empty.
>
> The best implementation would be either:
> -- method 1 inline
> put the itemDel into prevDel
> set the itemDel to asciiChar
> get the number of items in (textStr & null)
> set the itemDel to prevDel
>
> ---method 2 function
> function getCharCount asciiChar
>    set the itemDel to asciiChar
>    return  the number of items in (textStr & null)
> end getCharCount
>
> --and now the itemDel does not have to reset
> put getCharCount("¹") into howMany
>
> So many ways, so many choices :-)
>
> Jim Ault
> Las Vegas
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your  
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list