ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Taking value from one array and assigning to another array (https://www.excelbanter.com/excel-programming/425293-taking-value-one-array-assigning-another-array.html)

Varun

Taking value from one array and assigning to another array
 
Guys,

I am not able to figure out why I am getting the subscript out of range
error for the when the below sub is ran...the problem line is:

logical_layer(logicallayernumber) = Buf(buf_idx)

The sub opens up a file then parses each line until the required line is
found and then puts every word in that line into an array named Buf.

I'd like to take the value from the Buf array and put into another (new)
array named logical_layer - can you help me figure out what's wrong?

Thanks for help.





Sub geomsasciiparse()
Dim logical_layer() As Variant
Dim logicallayernumber As Integer

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objGeomsAsciiFile As Object

Dim Buf() As String

Set objGeomsAsciiFile = objFSO.OpenTextFile(path1 & "\geoms_ascii", 1)

Do While Not objGeomsAsciiFile.AtEndOfStream
strLine = objGeomsAsciiFile.Readline

If InStr(strLine, "_LAYER_DEFINITION") < 0 Then

Buf() = qc_Split(strLine)

logicallayernumber = Mid(Buf(1), 9, 2)

If logicallayernumber < "00" Then

For buf_idx = 1 To UBound(Buf)

If InStr(Buf(buf_idx), "SIGNAL") < 0 Or _
InStr(Buf(buf_idx), "POWER") < 0 Then

logical_layer(logicallayernumber) = Buf(buf_idx)


Exit For

End If

Next


End If


End If
Loop

objGeomsAsciiFile.Close

End Sub

Tom Hutchins

Taking value from one array and assigning to another array
 
I think you need to Redim logical_layer() as you increment logicallayernumber
(you are incrementing by one each time, I hope?) Something like

logicallayernumber = Mid(Buf(1), 9, 2)
Redim Preserve logical_layer(logicallayernumber)

Hope this helps,

Hutch

"Varun" wrote:

Guys,

I am not able to figure out why I am getting the subscript out of range
error for the when the below sub is ran...the problem line is:

logical_layer(logicallayernumber) = Buf(buf_idx)

The sub opens up a file then parses each line until the required line is
found and then puts every word in that line into an array named Buf.

I'd like to take the value from the Buf array and put into another (new)
array named logical_layer - can you help me figure out what's wrong?

Thanks for help.





Sub geomsasciiparse()
Dim logical_layer() As Variant
Dim logicallayernumber As Integer

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objGeomsAsciiFile As Object

Dim Buf() As String

Set objGeomsAsciiFile = objFSO.OpenTextFile(path1 & "\geoms_ascii", 1)

Do While Not objGeomsAsciiFile.AtEndOfStream
strLine = objGeomsAsciiFile.Readline

If InStr(strLine, "_LAYER_DEFINITION") < 0 Then

Buf() = qc_Split(strLine)

logicallayernumber = Mid(Buf(1), 9, 2)

If logicallayernumber < "00" Then

For buf_idx = 1 To UBound(Buf)

If InStr(Buf(buf_idx), "SIGNAL") < 0 Or _
InStr(Buf(buf_idx), "POWER") < 0 Then

logical_layer(logicallayernumber) = Buf(buf_idx)


Exit For

End If

Next


End If


End If
Loop

objGeomsAsciiFile.Close

End Sub


Tim Williams[_2_]

Taking value from one array and assigning to another array
 
You haven't defined any bounds for the logical_layer array.
Need to do that first: a VBA array is not like other languages' associative
arrays where you can arbitrarily assign values.
If that what you need then maybe use Scripting.Dictionary instead.

Tim.


"Varun" wrote in message
...
Guys,

I am not able to figure out why I am getting the subscript out of range
error for the when the below sub is ran...the problem line is:

logical_layer(logicallayernumber) = Buf(buf_idx)

The sub opens up a file then parses each line until the required line is
found and then puts every word in that line into an array named Buf.

I'd like to take the value from the Buf array and put into another (new)
array named logical_layer - can you help me figure out what's wrong?

Thanks for help.





Sub geomsasciiparse()
Dim logical_layer() As Variant
Dim logicallayernumber As Integer

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objGeomsAsciiFile As Object

Dim Buf() As String

Set objGeomsAsciiFile = objFSO.OpenTextFile(path1 & "\geoms_ascii", 1)

Do While Not objGeomsAsciiFile.AtEndOfStream
strLine = objGeomsAsciiFile.Readline

If InStr(strLine, "_LAYER_DEFINITION") < 0 Then

Buf() = qc_Split(strLine)

logicallayernumber = Mid(Buf(1), 9, 2)

If logicallayernumber < "00" Then

For buf_idx = 1 To UBound(Buf)

If InStr(Buf(buf_idx), "SIGNAL") < 0 Or _
InStr(Buf(buf_idx), "POWER") < 0 Then

logical_layer(logicallayernumber) = Buf(buf_idx)


Exit For

End If

Next


End If


End If
Loop

objGeomsAsciiFile.Close

End Sub




Varun

Taking value from one array and assigning to another array
 
Thanks Guys - that was it! Much appreciated.

"Tim Williams" wrote:

You haven't defined any bounds for the logical_layer array.
Need to do that first: a VBA array is not like other languages' associative
arrays where you can arbitrarily assign values.
If that what you need then maybe use Scripting.Dictionary instead.

Tim.


"Varun" wrote in message
...
Guys,

I am not able to figure out why I am getting the subscript out of range
error for the when the below sub is ran...the problem line is:

logical_layer(logicallayernumber) = Buf(buf_idx)

The sub opens up a file then parses each line until the required line is
found and then puts every word in that line into an array named Buf.

I'd like to take the value from the Buf array and put into another (new)
array named logical_layer - can you help me figure out what's wrong?

Thanks for help.





Sub geomsasciiparse()
Dim logical_layer() As Variant
Dim logicallayernumber As Integer

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objGeomsAsciiFile As Object

Dim Buf() As String

Set objGeomsAsciiFile = objFSO.OpenTextFile(path1 & "\geoms_ascii", 1)

Do While Not objGeomsAsciiFile.AtEndOfStream
strLine = objGeomsAsciiFile.Readline

If InStr(strLine, "_LAYER_DEFINITION") < 0 Then

Buf() = qc_Split(strLine)

logicallayernumber = Mid(Buf(1), 9, 2)

If logicallayernumber < "00" Then

For buf_idx = 1 To UBound(Buf)

If InStr(Buf(buf_idx), "SIGNAL") < 0 Or _
InStr(Buf(buf_idx), "POWER") < 0 Then

logical_layer(logicallayernumber) = Buf(buf_idx)


Exit For

End If

Next


End If


End If
Loop

objGeomsAsciiFile.Close

End Sub






All times are GMT +1. The time now is 09:42 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com