- Joy,

I also went through your clip again (messages #22230, #22245). I like that formula '^$Calc(^%V1%*676 + ^%V2%*26 + ^%V3%)$' which, actually, seems to be the heart of your solution.

So I combined it with some ideas of my first concept and managed to speed up your clip significantly. Originally, your clip needed 78 seconds (on my notebook) to check a list of 10,000 codes. The following version is doing it in 9 seconds:

^!SetHintInfo Working...

; Assign code list to array %List%

^!SetListDelimiter ^%NL%

^!SetArray %List%=^$GetText$

^!Set %AZ%="abcdefghijklmnopqrstuvwxyz"

^!Set %i%=1

:CodeToInt

; Save current code to variable for later output in case of gap

^!Set %CurrCode%=^%List^%i%%

; Convert code to number(with Joy's formula)

^!Set %First%=^$Convert(^%List^%i%%)$

^!Inc %First%

^!Inc %i%

^!If ^%i% > ^%List0% Out

^!Set %Second%=^$Convert(^%List^%i%%)$

^!IfSame ^%First% ^%Second% CodeToInt Else False

:False

^!Append %Gaps%=^%CurrCode%^P

^!Goto CodeToInt

:Out

^!IfEmpty ^%Gaps% Next Else Skip_2

^!Info No gaps!

^!Goto Skip_3

^!Toolbar New Document

^!InsertText Gap found after...^P^%Gaps%

^!Toolbar Second Window

^!ClearVariables

The sublip with custom function ^$Convert$ and your formula is...

^!Set %C1%=^$StrIndex(^&;1)$

^!Set %C2%=^$StrIndex(^&;2)$

^!Set %C3%=^$StrIndex(^&;3)$

^!Set %V1%=^$StrPos(^%C1%;^%AZ%;0)$

^!Set %V2%=^$StrPos(^%C2%;^%AZ%;0)$

^!Set %V3%=^$StrPos(^%C3%;^%AZ%;0)$

^!Result ^$Calc(^%V1%*676 + ^%V2%*26 + ^%V3%)$

Thanks again for your proposal! Maybe you'll have a look at this revised version...

Regards,

Flo

--- In ntb-clips@yahoogroups.com, "joy8388608" <mycroftj@...> wrote:

>

>

>

> --- In ntb-clips@yahoogroups.com, "Eb" <ebbtidalflats@> wrote:

> >

> > Hi Flo,

> >

> > You have are right in what the hex conversion was supposed to do.

> > In the mean time I found my original char to hex clip, which only converted a single digit. I applied the single-digit approach to your problem. While I got it to work, it just raised another problem.

> >

> > The alphabet is like a base-26 number set (English aplhabet), after shifting a to zero. Straight conversion to numbers creates gaps, where it rolls to the next digit, i.e. aaz --> aba has a gap of 26!, the value of the next digit, and azz to baa has a gap much larger!

>

>

> Sorry if I misunderstood you but I'll reply just in case in order to save you possible extra work and confusion...

>

> You said aaz to aba has a gap but you correctly noted a=0...z=25.

> Therefore, aaz=(0*26^2 + 0*26 + 25)=25 and aba=(0*26^2 + 1*26 + 0)=26 - No gap. Likewise, azz=675 and baa=676. Again, no gap.

>

> Hope this helps, sorry if I misunderstood.

>

> Joy

> - --- In ntb-clips@yahoogroups.com, "flo.gehrke" <flo.gehrke@...> wrote:
>

My pleasure. Joy

> --- In ntb-clips@yahoogroups.com, "joy8388608" <mycroftj@> wrote:

> >

> > Flo -

> >

> > Very interesting. Your clip is much faster than mine even

> > when I turned ScreenUpdate off. Mine took 41 seconds and

> > yours took 15 for 17550 lines (aaa to zzz with 26 .rr lines

> > removed). Why? I'm not sure...

>

> > Flo -

> >

> > Very interesting. Your clip is much faster than mine even when

> > I turned ScreenUpdate off. Mine took 41 seconds and yours took

> > 15 for 17550 lines (aaa to zzz with 26 .rr lines removed). Why?

> > I'm not sure...

>

> Joy,

>

> I think there are three main reasons for that:

>

> 1. Assigning the whole list to an array

>

> 2. Calculating ^$ConvertTo26$ only twice -- it's done three times in your clip

>

> 3. Gathering up the gaps with ^!Append and outputting them all at once -- no ^!InsertText

>

> > I wrote a quick clip to generate the lines aaa to zzz. Let

> > me know if anyone wants me to post the code.

>

> I put my hand up and would enjoy seeing that clip!

>

> Flo

>

Generate Base 26 numbers

; by Joy

^!Continue This will generate 17576 lines from aaa to zzz.

^!SKIP Leave Screen update on? (Slower...)

^!Setscreenupdate OFF

^!StatusShow Generating sequences aaa to zzz...

; Start with aaa

^!Set %I%=-1

:LoopStart

^!Inc %I%

^!Set %Num%=^%I%

; Find value of first digit (of 3) (will be 0 to 25)

^!Set %x%=^$Calc(INT(^%Num%/676))$

; Convert first digit to letter (will be a to z)

^!Set %B26%=^$DecToChar(^$Calc(^%x%+97)$)$

; adjust value of current number

^!Set %Num%=^$Calc(^%Num% - (^%x%*676))$

; Find value of second digit (of 3) (will be 0 to 25)

^!Set %x%=^$Calc(INT(^%Num%/26))$

; Convert second digit to letter (will be a to z) and append

^!Set %B26%=^%B26%^$DecToChar(^$Calc(^%x%+97)$)$

; adjust value of current number

^!Set %Num%=^$Calc(^%Num% - (^%x%*26))$

; Convert remaining value (0 to 25) to letter (will be a to z) and append

^!Set %B26%=^%B26%^$DecToChar(^$Calc(^%Num%+97)$)$

; Output value

^!InsertText ^%B26%^%NL%

^!If "^%B26%" <> "zzz" LoopStart

^!Sound SystemExclamation