1

我得到了这个 .txt 文件。

Left Behind,Lahaye,F,7,11.25
A Tale of Two Cities,Dickens,F,100,8.24
Hang a Thousand Trees with Ribbons,Rinaldi,F,30,16.79

该文件是: 书名作者小说或非小说股票价格

我需要将它们分成多个数组,至少我觉得我这样做了,到目前为止我有这个

    Private Sub frmInventory_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Populate array
    Dim temp() As String = IO.File.ReadAllLines("Books.txt")
    temp = Split(",")
    lstBooks.DataSource = temp.ToList
End Sub

这不是诀窍......显然。

我只是不知道如何将其放入多个数组中,例如书籍等,或者可能是二维数组。

谢谢你的帮助。

我看过很多这样的网站,但他们提供的唯一帮助是将其拆分为 2. http://patorjk.com/programming/tutorials/vbarrays.htm#splitfunction

4

2 回答 2

2

如果格式总是那么严格,您可以使用 string.Split 手动完成,否则我建议使用现有的库FileHelpers,例如这个快速 CSV 解析器或 VB.NET 板载TextFieldParser类。

要回答您的实际问题,您可以使用 anFile.ReadLines和 an IEnumerable(Of String())

Dim lines As IEnumerable(Of String()) = 
         From line In IO.File.ReadLines("Books.txt")
         Select line.Split(","c)

如果您想要一个数组:lines.ToArray(),它将全部加载到内存中(例如File.ReadAllLines),而File.ReadLines流式传输文件中的行并且仅在您要求时(fe via Take(10))。

编辑:如果您想要最可重用的方法,请使用具有这些属性的自定义类并从 string() 初始化它:

Public Class Book
    Public Property Title As String
    Public Property Author As String
    ' and so on '
End Class

 Dim books = From line In System.IO.File.ReadLines("Books.txt")
             Let parts = line.Split(","c)
             Select New Book() With {
                .Title = parts(0),
                .Author = parts(1)
            }

例如,您可以在 aFor Each或作为 DataSource 中使用它。请注意,它容易出错,标题可能还包含逗号,或者格式并不总是严格的。

于 2012-10-29T22:26:54.270 回答
0

在不知道您想对数据做什么的情况下,很难提供帮助。但我想你最好的选择是创建一个书籍类,其中包含书名、作者、价格等属性。

创建一个列表(书籍),逐行读取 txt 文件,用逗号分隔每一行,并使用每个结果数组创建一个书籍实例,并将其添加到列表中,就像这个仓促编写的示例:

Public Class book
Property title As String
Property author As String
Property price As Double

Public Sub New(ByVal title As String, ByVal author As String, ByVal price As Double)
    _title = title
    _author = author
    _price = price
End Sub
End Class

Public Class Form1
Public booklist As List(Of book)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles Button1.Click
    Dim bookfile As String() = IO.File.ReadAllLines("c:\file.txt")
    For Each line As String In bookfile
        Dim bookinfo As String() = line.Split(",")
        Dim abook As New book(bookinfo(0), bookinfo(1), bookinfo(2))
        booklist.Add(abook)
    Next
End Sub
End Class

如果这是您想做的事情,我将根据需要改进上述代码

于 2012-10-29T22:51:00.440 回答