2016-01-14 3 views
0

У меня есть текстовый файл, который имеет данные по строкам. Я пытаюсь помещать строки данных в массив или список.Включение текстового файла в список или массив с помощью streamreader

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 имеет значение null/nothing. Почему не читается поток и что я делаю неправильно?

+0

удалить отметку с комментариями от '' line = r.ReadLine': он отлично работает для меня. Строка 'sr.ReadToEnd' будет использоваться только для первого, поскольку для второго, так как вы хотите читать строки за строкой. – Plutonix

+0

Привет, Дэвид, вы используете оба решения в одной функции/параллельно? Вы должны работать с «использованием» также в своем первом решении. Возможно, поток уже находится в конце файла. Попробуйте закомментировать решение1 и присвоить streamString. – etalon11

+1

Да, они не будут работать вместе - метод №1 уже будет потреблять поток – Plutonix

ответ

1

После этой линии:

Dim streamString As String = sr.ReadToEnd 

Ваш объект поток пуст, все его содержимое было скопировано в строку и теперь «поток» не содержит ничего. Некоторые классы потоков поддержки:

Stream.Seek(0, SeekOrigin.Begin) 

Чтобы вернуться к началу, но поток, возвращаемый GetResponseStream() не поддерживает его.

Вы можете либо дублировать поток (я бы не рекомендовал), либо вы можете просто обработать streamString, который вы уже получили.

Смежные вопросы