Jump to content
Sign in to follow this  
Private

Struggled with 2d array

Recommended Posts

Private

Dear all,

I'm creating an import function from Excel to Autoit to a database.

now, from this excel document i use the ReadArray from ExcelCOM UDF, that all works fine.

See the array as following:

-------------------------------------------------

Field 1 | Field 2 | Field 3 | Field 4 | Field 5 |

-------------------------------------------------

Now i want to keep adding data to these fields, as being a table, for use later on BUT i don't know how long this array will be (for rows) so i cannot dim this max at front.

I've tried just adding it, within the use of my loopvariables, but it comes with the error: ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.

and that's obvious, there my array has the max rowlength as being [1][5]

:) I just tried to dim it as [999][5] at front (THIS WORKS :( ), but i'm not happy with this.

can someone please help me with a correct solution on this, i would really appreciate this.

Thanks in advance.

I also have the excel document added to this post, to get a feeling for the input.

This is my function:

func sp_com_read_column($oExcel)
    
    dim $a_Staffel[1][5]
    $a_Staffel[0][0] = "Staffelgrens"
    $a_Staffel[0][1] = "Tarief"
    $a_Staffel[0][2] = "Minimumbedrag"
    $a_Staffel[0][3] = "Bloktarief Aantal"
    $a_Staffel[0][4] = "Bloktarief Bedrag"
    
    
    $i =  2
    
    While 1
        $a_Column = _ExcelReadArray($oExcel, $i, 1, 5)
        
        if $a_Column[0] = "" Then
            ExitLoop
        EndIf
        
        for $y = 0 to Ubound($a_Column) -1
            
            msgbox(0, "", "$y = " & $i-1 & @CRLF & "$i = " & $y & @CRLF & "Value = " & $a_Column[$y])
            
        ; Begin filling the array with [1][0]
        ; Use begin by loopvariabels $i = 1, This is constant inside this loop, as it increments it's the loop thats the goal
        ;                            $y = 0, incremental inside this loop, the fiels as transposed vertically, needs to be used vertically

            $a_Staffel[$i-1][$y] = $a_Column[$y]
                
            _ArrayDisplay($a_Staffel)
        Next
        $i =  $i + 1
    WEnd
    _ArrayDisplay($a_Staffel, 0, 0, 1)
    
    
    
EndFunc

Share this post


Link to post
Share on other sites
monoceres

You have to use the keyword ReDim, here's a little example I just made so you can see how it works :)

#include <array.au3>
Dim $array[1][5]
For $i=0 To 1000
    ReDim $array[UBound($array,1)+1][5]
    _ArrayDisplay($array)
    For $j=0 To 4
    $array[UBound($array,1)-1][$j]=$i
    Next
Next
_ArrayDisplay($array)

Broken link? PM me and I'll send you the file!

Share this post


Link to post
Share on other sites
Private

Make my day, i'm gonna try this.

lol, i saw the redim, but did not know that it was used for this! :)

You'll be hearing from me.

Share this post


Link to post
Share on other sites
Private

Thank you in advance!!!

you just made my day !!! :-)

have a nice weekend.

func sp_com_read_column($oExcel)
    
    dim $a_Staffel[1][5]
    $a_Staffel[0][0] = "Staffelgrens"
    $a_Staffel[0][1] = "Tarief"
    $a_Staffel[0][2] = "Minimumbedrag"
    $a_Staffel[0][3] = "Bloktarief Aantal"
    $a_Staffel[0][4] = "Bloktarief Bedrag"
    
    
    $i =  2
    
    While 1
        $a_Column = _ExcelReadArray($oExcel, $i, 1, 5)
        
        if $a_Column[0] = "" Then
            ExitLoop
        EndIf
        
        redim $a_Staffel[UBound($a_Staffel,1)+1][5]
        for $y = 0 to Ubound($a_Column) -1
            $a_Staffel[$i-1][$y] = $a_Column[$y]
                
        Next
        $i =  $i + 1
    WEnd
    
EndFunc

Share this post


Link to post
Share on other sites
monoceres

Always happy to help :)

And a nice weekend to you too. :(


Broken link? PM me and I'll send you the file!

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×