A.Wad
A.Wad

Reputation: 29

3D array in vb.net

How to define ,dynamically initialize and print 3D array in vb.net ?

I have this code that return a 3d array and I have errors telling me the there is an argument out of range .. and when i seek the line i found nothing wrong ?

this is the function code :

Private Function readFESTWERTEBLOCK(ByVal FESTWERTEBLOCKString As String ) _
    As String (,,)

    Dim allX As System.Text.RegularExpressions .Group
    Dim allY As System.Text.RegularExpressions.Group
    Dim allZ As System.Text.RegularExpressions.Group
    Dim tempArray (,,) As String 
    Dim allXval As System.Text.RegularExpressions .MatchCollection
    Dim allYval As System.Text.RegularExpressions.MatchCollection 
    Dim allZval As System.Text.RegularExpressions.MatchCollection
    Dim oldUp ,midUp,newUp  As Integer 
    Dim a,b,c
    Dim myRegExpallX As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallY As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallZ As New System.Text.RegularExpressions.Regex("WERT([\-\s\.0-9e]+)")
    Dim myRegExpallXval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")
    Dim myRegExpallYval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")
    Dim myRegExpallZval As New System.Text.RegularExpressions.Regex("[\w\-\.]+")

    ReDim tempArray (0 To 2 ,0 To -1, 0 To -1 )
    For a=0 To myRegExpallX.Matches(FESTWERTEBLOCKString).Count-1
        If myRegExpallX.Matches(FESTWERTEBLOCKString).Item(a).Groups.Count>1 And myRegExpallY.Matches(FESTWERTEBLOCKString).item(a).Groups.Count>1 AndAlso myRegExpallZ.Matches(FESTWERTEBLOCKString).item(a).Groups.Count>1 Then
            allX = myRegExpallX.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allXval= myRegExpallXval.Matches(allX.Value.ToString())

            allY = myRegExpallY.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allYval= myRegExpallYval.Matches(allY.Value.ToString())

            allZ = myRegExpallZ.Matches(FESTWERTEBLOCKString).Item(a).Groups.Item(1)
            allZval= myRegExpallZval.Matches(allZ.Value.ToString())

            oldUp= UBound(tempArray,3)
            midUp= UBound(tempArray , 3) + allXval.Count
            newUp=UBound(tempArray,3)+allXval.Count+allYval.Count

            ReDim Preserve tempArray(0 To 2 ,0 To midUp ,0 To newUp)
            For c=oldUp+2 To (allXval.Count+allYval.Count+oldUp)
                For b= midUp+2 To allXval.Count+midUp
                   Dim tmpMatchX As System.Text.RegularExpressions.Match=allXval.Item(b-oldUp-2)
                   tempArray(0,b,c)=tmpMatchX.Value.ToString()
                   Dim tmpMatchY As System.Text.RegularExpressions.Match=allYval.Item(b-oldUp-2)
                   tempArray(1,b,c)=tmpMatchY.Value.ToString()
                   Dim tmpMatchZ As System.Text.RegularExpressions.Match=allZval.Item(b-oldUp-2)
                   tempArray(2,b,c)=tmpMatchZ.Value.ToString()
                Next
            Next
        End If
    Next       
    readFESTWERTEBLOCK = tempArray
End Function

Upvotes: 1

Views: 7943

Answers (1)

Olivier Jacot-Descombes
Olivier Jacot-Descombes

Reputation: 112392

You can initialize a 3-dimensional array like this

Dim a(,,) As Double

a = New Double(5, 4, 10) {}

This array has the following index ranges

a(0..5, 0..4, 0..10)

And has a size of 6 x 5 x 11 elements.


If you have dimensions that can grow, use List(Of T) for them

Dim tempArray As List(Of List(Of String))() = New List(Of List(Of String))(2) {}

tempArray(0) = New List(Of List(Of String))()

tempArray(0).Add(New List(Of String)());
tempArray(0)(0).Add("Some string");
tempArray(0)(0).Add("Some other string");

tempArray(0).Add(New List(Of String)());
tempArray(0)(1).Add("XXX");
tempArray(0)(1).Add("YYY");
tempArray(0)(1).Add("ZZZ");

tempArray(0)(1)(2) ===> "YYY"

Upvotes: 3

Related Questions