从文本文件读取到数组

时间:2017-12-27 16:09:35

标签: vb.net

我正在尝试逐行读取文本文件并将其添加到数组中,当前代码和输出如下。我将如何正确读取它,即获取实际文本以读入数组,而不是当前输出。 (VB.NET的控制台应用版本)

代码:

Sub Main()
    Dim file As String = "C:\path\to\file\textfile.txt"
    Dim quoteArray As New ArrayList
    FileOpen(1, file, OpenMode.Input)
    Do While Not EOF(1)
        quoteArray.Add(LineInput(1))
    Loop
    FileClose(1)
    Console.WriteLine(quoteArray)
    Console.ReadLine()
End Sub

输出:

System.Collections.ArrayList

2 个答案:

答案 0 :(得分:6)

您的代码有效,但您无法一次打印整个数组。您必须以某种方式迭代数组并单独打印每个项目或将它们组合成一个字符串。

分别打印每件商品:

For Each Item As String In quoteArray
    Console.WriteLine(Item)
Next

使用String.Join()将它们组合成一个字符串:

Console.WriteLine(String.Join(Environment.NewLine, quoteArray.ToArray(GetType(String))))

然而,我不明白你为什么要用VB.NET编写,但仍在使用VB6时代过时的函数和类:

  • ArrayList

  • FileOpen()

  • LineInput()

  • FileClose()

现在有 更好的选择:

或者您可以使用regular arrayFile.ReadAllLines()的一次调用替换以上所有内容。

  1. StreamReader解决方案:

    Dim quoteList As New List(Of String)
    
    Using Reader As New StreamReader("C:\path\to\file\textfile.txt")
        While Reader.EndOfStream = False
            quoteList.Add(Reader.ReadLine())
        End While
    End Using
    
  2. File.ReadAllLines()解决方案:

    Dim quoteArray As String() = File.ReadAllLines("C:\path\to\file\textfile.txt")
    
  3. 使用循环打印列表/数组:

    For Each Item As String In quoteArray
        Console.WriteLine(Item)
    Next
    

    使用String.Join()打印列表/数组:

    Console.WriteLine(String.Join(Environment.NewLine, quoteArray))
    

    (如果您使用的是quoteList解决方案,请在这两个示例中将quoteArray替换为quoteList

答案 1 :(得分:2)

使用ReadLines

  

ReadLines和ReadAllLines方法的不同之处如下:使用ReadLines时,可以在返回整个集合之前开始枚举字符串集合;当您使用ReadAllLines时,必须等待返回整个字符串数组才能访问该数组。因此,当您使用非常大的文件时,ReadLines可以更有效。