通过streamreader将文本文件转换为列表或数组

时间:2016-01-14 15:51:42

标签: vb.net

我有一个逐行数据的文本文件。我试图将数据行放入数组或列表中。

    Dim req As WebRequest = WebRequest.Create("http://www.blahblah.com/data/ListFull.csv")
    Dim res As WebResponse = req.GetResponse()
    Dim stream As Stream = res.GetResponseStream()
    Dim sr As StreamReader = New StreamReader(stream, Encoding.ASCII)
    Dim streamString As String = sr.ReadToEnd

    '#1
    Dim lines1 As String()
    If streamString.Length > 0 Then
        lines1 = streamString.Split(vbLf)
    End If

    '#2
    Dim lines2 As New List(Of String)
    Using r As StreamReader = New StreamReader(stream, Encoding.ASCII)
        Dim line As String
        line = r.ReadLine
        Do Until String.IsNullOrEmpty(line)
            lines2.Add(line)
            'counter += 1
            'line = r.ReadLine
        Loop
    End Using

我有一个选项工作正常,所有文件数据都进入我的lines1数组。

但是选项2不起作用。当我单步执行代码时:line = r.ReadLine为空/无。为什么不读入流以及我做错了什么?

1 个答案:

答案 0 :(得分:1)

这一行之后:

Dim streamString As String = sr.ReadToEnd

您的流对象为空,其所有内容都已复制到字符串中,现在“stream”不包含任何内容。一些流类支持:

Stream.Seek(0, SeekOrigin.Begin)

要回到开头,但GetResponseStream()返回的Stream不支持它。

你可以复制Stream(我不推荐),也可以只处理你已经检索过的streamString。