M
Mike NG
Two part question....
I have the following code driver to show the example
The Links array will have been populated with values
I then want to call my Filter subroutine, to find links which match
sFilter, and add them to the Target array - called filter
The code below works, but I'd like to avoid the "On error" if I could.
In the debugger I see first time in that sTarget has a value of Nothing,
but I can't work out how to test for this. Both
if sTarget is Nothing and
if sTarget() is Nothing
fail. What do I need to do to solve this
Option Explicit
Option Base 1
Type LinkInfo
href As String
InnerText As String
End Type
Dim Links() As LinkInfo
Dim Filtered() As LinkInfo
Sub Setup()
ReDim Links(4)
Links(1).href = "AAAAA"
Links(2).href = "ABBBA"
Links(3).href = "AAACCC"
Links(4).href = "ADDDA"
Filter Links, Filtered, "AA"
Filter Links, Filtered, "DDD"
Links(4).href = "ADDDA"
End Sub
Sub Filter(sSource() As LinkInfo, sTarget() As LinkInfo, sFilter As
String)
Dim iIndex As Integer
Dim iLength As Integer
On Error Resume Next
iLength = UBound(sTarget)
On Error GoTo 0
For iIndex = 1 To UBound(sSource)
If sSource(iIndex).href Like "*" & sFilter & "*" Then
iLength = iLength + 1
If iLength = 1 Then
ReDim sTarget(1)
Else
ReDim Preserve sTarget(iLength)
End If
sTarget(iLength) = sSource(iIndex)
End If
Next
End Sub
Part Two...
Suppose Filtered() was a global variable.
How would I "clear it down" so that I could manipulate a further set of
links and effectively start over?
The only code that will work is
ReDim Filtered(1)
so I suppose all of the above is going to point to me using an option
base of 0 - and wasting that element of the array. This will then
provide a solution for my uninitialised array in my Filter routine. Is
that what you reckon?
I have the following code driver to show the example
The Links array will have been populated with values
I then want to call my Filter subroutine, to find links which match
sFilter, and add them to the Target array - called filter
The code below works, but I'd like to avoid the "On error" if I could.
In the debugger I see first time in that sTarget has a value of Nothing,
but I can't work out how to test for this. Both
if sTarget is Nothing and
if sTarget() is Nothing
fail. What do I need to do to solve this
Option Explicit
Option Base 1
Type LinkInfo
href As String
InnerText As String
End Type
Dim Links() As LinkInfo
Dim Filtered() As LinkInfo
Sub Setup()
ReDim Links(4)
Links(1).href = "AAAAA"
Links(2).href = "ABBBA"
Links(3).href = "AAACCC"
Links(4).href = "ADDDA"
Filter Links, Filtered, "AA"
Filter Links, Filtered, "DDD"
Links(4).href = "ADDDA"
End Sub
Sub Filter(sSource() As LinkInfo, sTarget() As LinkInfo, sFilter As
String)
Dim iIndex As Integer
Dim iLength As Integer
On Error Resume Next
iLength = UBound(sTarget)
On Error GoTo 0
For iIndex = 1 To UBound(sSource)
If sSource(iIndex).href Like "*" & sFilter & "*" Then
iLength = iLength + 1
If iLength = 1 Then
ReDim sTarget(1)
Else
ReDim Preserve sTarget(iLength)
End If
sTarget(iLength) = sSource(iIndex)
End If
Next
End Sub
Part Two...
Suppose Filtered() was a global variable.
How would I "clear it down" so that I could manipulate a further set of
links and effectively start over?
The only code that will work is
ReDim Filtered(1)
so I suppose all of the above is going to point to me using an option
base of 0 - and wasting that element of the array. This will then
provide a solution for my uninitialised array in my Filter routine. Is
that what you reckon?