0

以下を使用して Web ページを取得しています。

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 thesource As String = reader.ReadToEnd

ソースからデータを抽出しようとしています。thesourceはページのソース コードを正常に保持しますが、For Each ループは各行ではなく各文字で応答するだけなので、For Each ループを使用して各行をループすることはできません。

誰かがこれを修正する方法を提案できますか? ありがとう、スタン。

4

1 に答える 1

1

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)
于 2013-02-01T02:58:07.563 に答える