3 つのオプションが表示されます。
オプション 1. For Each ではなく、While ループで 1 行ずつ読み取ります。とにかくすべてが同じ関数にある場合は、これを使用してください。
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
request.CookieContainer = logincookie
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim reader As New StreamReader(response.GetResponseStream())
Dim line As String = reader.ReadLine()
While line IsNot Nothing
'Contents of your For Each loop go here
line = reader.ReadLine()
End While
オプション 2: 少なくとも Visual Studio 2012 があり、この関数から結果を返す必要があるため、このコードを呼び出したコードで For Each ループを使用できます。
Public Iterator Function GetUrl(ByVal url As String) As IEnumerable(Of String)
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
request.CookieContainer = logincookie
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim reader As New StreamReader(response.GetResponseStream())
Dim line As String = reader.ReadLine()
While line IsNot Nothing
Yield line
line = reader.ReadLine()
End While
End Function
次のように呼び出します。
For Each line As String In GetUrl("http://example.com")
'...
Next line
オプション 3: 前のオプションのように関数から戻りたいが、新しい反復子言語機能を使用できない。
Public Sub GetUrl(ByVal url As String, ByVal lineAction As Action(Of String))
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
request.CookieContainer = logincookie
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim reader As New StreamReader(response.GetResponseStream())
Dim line As String = reader.ReadLine()
While line IsNot Nothing
lineAction(line)
line = reader.ReadLine()
End While
End Sub
次のように呼び出します。
GetUrl("http://example.com", _
Sub(l)
'Do stuff here
End Sub)