【问题标题】:Need help splitting a string into multiple arrays in Visual basic需要帮助在 Visual Basic 中将字符串拆分为多个数组
【发布时间】:2012-10-29 22:12:24
【问题描述】:

我得到了这个 .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

【问题讨论】:

    标签: arrays vb.net visual-studio-2010


    【解决方案1】:

    如果格式总是那么严格,您可以使用 string.Split 手动完成,否则我建议使用现有库,如 FileHelpers、此 fast CSV parser 或 VB.NET 板载 TextFieldParser 类。

    要回答您的实际问题,您可以使用File.ReadLinesIEnumerable(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 仅在你要求时才从文件中流式传输行(例如通过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)
                }
    

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

    【讨论】:

      【解决方案2】:

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

      创建一个列表(书籍),逐行读取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
      

      如果这是你想做的事情,我会根据需要改进上面的代码

      【讨论】:

      • 感谢您的回答!但基本上我对数据所做的只是使用我得到的数组来使数据可排序,所以我可以说如果 author(1) 是 Lahaye 那么 Author(1) = ("Lahi") 或类似的东西这就是为什么我试图将它分成多个数组
      • 好的,我很难理解你想要达到的目标。也许您可以编辑您的问题以提供全局,因为您似乎仍然只想对数据进行排序,而(对象)列表似乎是最简单的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多