Search code examples
arraysvb.netstreamreader

Loading file into array using streamreader


I'm trying to get a file and iterate through it using StreamReader and load each line into an array. I know the file is coming in correctly and it is a text file of data coming in lines.

    Dim req As WebRequest = WebRequest.Create("http://www.blahahahaha.com/data/myfile.csv")
    Dim res As WebResponse = req.GetResponse()
    Dim stream As Stream = res.GetResponseStream()

    Dim lines2 As String()
    Using r As StreamReader = New StreamReader(stream, Encoding.ASCII)
        Dim line As String
        line = r.ReadLine
        Do While (Not line Is Nothing)
            lines2(lineCount2) = r.ReadLine
            lineCount2 += 1
        Loop
    End Using

But the resulting array is empty. What am I doing wrong and how do I fix it?


Solution

  • This line:

    Dim lines2 As String()
    

    Just declares that lines2 will be a string array. The array itself is not intialized:

    Dim lines2(9) As String     ' THIS one has elements
    

    But since you likely do not know how many lines there will be, use a List:

    Dim Lines 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)
            Lines.Add(line)
            line = r.ReadLine
        Loop
    End Using
    

    If the calling code really needs an array:

    Return Lines.ToArray()