【问题标题】:convert csv data to DataTable in VB.net在 VB.net 中将 csv 数据转换为 DataTable
【发布时间】:2012-06-20 11:36:26
【问题描述】:

我正在尝试将存储为 csv 文件的大型整数数组导入名为 BeamMap 的 VB.Net 数据表中。 .csv 文件仅由整数组成,分隔符为,,数据周围没有引号(即1,3,-2,44,1),以及换行符和回车符的行尾字符。我要做的就是将每个整数放入具有适当行和列的 DataTable 单元格中(每行的列数相同),并且以后可以在我的代码中引用它。我真的不想要代码中绝对必要的任何东西(没有标题、说明、标题等),我需要它相当高效(csv 数组大约为 ~1000 x ~1000)。

谢谢!

【问题讨论】:

  • @AVD:怎么样?作为答案,这可能是一件好事。

标签: vb.net csv import multidimensional-array datatable


【解决方案1】:

使用 OleDb 提供程序读取 CSV 并填充 DataTable

 Dim folder = "c:\location\of\csv\files\"
 Dim CnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & folder & ";Extended Properties=""text;HDR=No;FMT=Delimited"";"
 Dim dt As New DataTable
 Using Adp As New OleDbDataAdapter("select * from [nos.csv]", CnStr)
       Adp.Fill(dt)
 End Using

【讨论】:

    【解决方案2】:

    这是一个需要严格格式的简单方法(正如您所提到的):

    Dim lines = IO.File.ReadAllLines(path)
    Dim tbl = New DataTable
    Dim colCount = lines.First.Split(","c).Length
    For i As Int32 = 1 To colCount
        tbl.Columns.Add(New DataColumn("Column_" & i, GetType(Int32)))
    Next
    For Each line In lines
        Dim objFields = From field In line.Split(","c)
                     Select CType(Int32.Parse(field), Object)
        Dim newRow = tbl.Rows.Add()
        newRow.ItemArray = objFields.ToArray()
    Next
    

    【讨论】:

    • 第三行分隔符后的c 是什么?另外,我会将其设为函数还是子函数?
    • @matt:是的,它是一个 char 字面量,与 C# 中的 'c' 相同。我不明白你的另一个问题。这取决于您的要求,如果它属于一个功能或一个子。它只是从 csv 文件创建一个 DataTable,不多也不少。您可以将其退回或做任何您需要做的事情。
    【解决方案3】:

    从映射驱动器获取文件并将检索到的数据放入数据集中:

    Dim folder = "Z:\"
    Dim CnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & folder & ";Extended Properties=""text;HDR=No;FMT=Delimited"";"
    
    Dim dssample As New DataSet
    Using Adp As New OleDbDataAdapter("select * from [samplecsv.csv]", CnStr)
        Adp.Fill(dssample)
    End Using
    
    If dssample.Tables.Count > 0 Then
        'some code here
    End If
    

    【讨论】:

      【解决方案4】:

      另外,不要忘记包含

      Imports System.Data.OleDb
      

      如果您希望链接到 DataGridView(阅读后):

      Dim bs As New BindingSource
      bs.DataSource = dt
      DataGridView1.DataSource = bs
      

      【讨论】:

        猜你喜欢
        • 2015-07-23
        • 2015-02-25
        • 2013-01-28
        • 2010-10-27
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多