Reputation: 29
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
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