Jump to content

Recommended Posts

Posted

Hi guys,

I haven't been using AutoIt for a couple of months now as I have been working with PHP a lot and college work has got in the way.

Today, a study day I have decided to complete or near complete OEMWizard. I have fixed a couple of bugs and changed some things around.

I have now thought about including a function which will covert ~VER to @OSVERSION which from the feedback I have had from friends and the companys whom use OEMWizard would like.

So this is my code:

; This function is our "in-program" tags lexer
Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 1 to 3
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][1], 1) Then
            StringReplace(GUICtrlRead($LexControl), $Tags[$Lex][1], $Tags[$Lex][2])
        EndIf
    Next
EndFunc

No errors when starting the script obviously but when the function gets called I get this error,

C:\Documents and Settings\James\My Documents\Programming\AutoIt\Projects\OEMWizard\OEMWiz.au3 (516) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
Local $Tags[2][3] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
Local $Tags[2][3] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], [^ ERROR

And I cannot see why it's showing that one and not any others.

Please help :)

James

Posted

Well this doesn't error but it doesn't replace the tags either.

; This function is our "in-program" tags lexer
Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 0 to 2
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][1]) Then
            StringReplace(GUICtrlRead($LexControl), $Tags[$Lex][1], $Tags[$Lex][2])
        EndIf
    Next
EndFunc

I'm guessing arrays declared like above, their index is 0.

Posted

Well this doesn't error but it doesn't replace the tags either.

; This function is our "in-program" tags lexer
Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 0 to 2
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][1]) Then
            StringReplace(GUICtrlRead($LexControl), $Tags[$Lex][1], $Tags[$Lex][2])
        EndIf
    Next
EndFunc

I'm guessing arrays declared like above, their index is 0.

Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]

$Tags has elements in 3 rows and 2 columns.

The counting of the index of the array starts at zero, then one, then two. This equates to 3 rows. Base zero

For $lex = 1 to 3

If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][1], 1) Then

NOTICE $Tags[$lex][1] will be $Tags[3][1] The 3 subscript dimension range exceeded.

Maximium indexes or "subscript dimension ranges" allowed with Local $Tags[3][2] declaration is $Tags[2][1]

In your script above, StringReplace(GUICtrlRead($LexControl), $Tags[$Lex][1], $Tags[$Lex][2]),

you can not have $Tags[$Lex][2]. The 2 subscript dimension range exceeded.

#Include <Array.au3>

Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
ConsoleWrite($Tags[0][0] & @CRLF)
_ArrayDisplay($Tags)
Posted

Oh I see, well now I have this:

; This function is our "in-program" tags lexer
; This function is our "in-program" tags lexer
Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 0 to 2
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][0]) Then
            StringReplace(StringInStr(GUICtrlRead($LexControl), $Tags[$lex][0]), $Tags[$Lex][0], $Tags[$Lex][1])
        EndIf
    Next
EndFunc

But now it replaces everything with a 0 even if I was to put "Version: ~VER" this is probably really blindingly simple but I cannot see it.

Posted

Oh I see, well now I have this:

; 
    For $lex = 0 to 2
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][0]) Then
            StringReplace(StringInStr(GUICtrlRead($LexControl), $Tags[$lex][0]), $Tags[$Lex][0], $Tags[$Lex][1])
        EndIf
    Next

But now it replaces everything with a 0 even if I was to put "Version: ~VER" this is probably really blindingly simple but I cannot see it.

Look up StringInStr() in help.

Return Value

Success: Returns the position of the substring.

Posted

Try this.

; This function is our "in-program" tags lexer
Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 0 to 2
        If StringInStr(GUICtrlRead($lexControl), $Tags[$lex][0]) > 0 Then
            StringReplace(GUICtrlRead($LexControl), $Tags[$Lex][0], $Tags[$Lex][1])
        EndIf
    Next
EndFunc
Posted (edited)

Func LexTags($lexControl)
    Local $Tags[3][2] = [["~VER", @OSVersion], ["~SERVICE", @OSServicePack], ["~DATE", @MDAY & "/" & @MON & "/" & @YEAR]]
    
    For $lex = 0 to UBound($Tags)-1
        
        $sRead = GUICtrlRead($lexControl)
        
        If StringInStr($sRead, $Tags[$lex][0]) Then
            
            GUICtrlSetData($lexControl,StringReplace($sRead, $Tags[$lex][0], $Tags[$lex][1]))
            
        EndIf
    Next
EndFunc

Should work.

Edited by Kip

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...