【问题标题】:CSV to DataTableCSV 到数据表
【发布时间】:2018-04-10 14:10:12
【问题描述】:

我想知道将 CSV 解析为 DataTable 的最佳选择是什么。

我的 CSV 是这种格式

分隔符:逗号
分隔符:双引号(例如“字符串”)
转义:2x 双引号

示例如下:

Col1,Col2,Col3,Col4 1234,active,”这是一个带有换行符、逗号和所有字符的长文本”, XGF232 1235,active,"这也是一个“长”的文本,换行和全部”,XHD233
  1. 问题是数字还是短;一个单词字符串不包含在引号内。
  2. 另一个问题是用引号括起来的长字符串也有嵌套的“字符串”被“字符串”转义。

PS:Excel 可以毫无问题地理解这种格式。

编辑:

cmets 为我指出了不同的选择。我搜索了可用的库,发现 LumenWorks.Framework.IO.Csv 似乎可以完美地完成这项工作。

Using csv As CsvReader = New CsvReader(New StreamReader(filename), True)
                Dim fieldCount = csv.FieldCount
                Dim headers() As String = csv.GetFieldHeaders()
                dt.Load(csv)
End Using

【问题讨论】:

  • 使用库。 CsvHelper 非常受欢迎。
  • 我不会认为符合 CSV 规则的文档有问题 :) - 您期待什么样的答案?
  • 我试图使用带有拆分的循环,但这带来了某些问题,我认为我可以解决,但这变得太复杂了,我相信有更好的方法。现在正在查看 CSVHelper。
  • DataTable 通常不是最后一站 - 如果目的地是 DB,很多会直接导入
  • 你可以试试 oledb - stackoverflow.com/questions/6813607/…

标签: vb.net datatable


【解决方案1】:

您可以从 DGV 导入 Excel 吗?

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim DtSet As System.Data.DataSet
        Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
        MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\vb.net-informations.xls';Extended Properties=Excel 8.0;")
        MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
        MyCommand.TableMappings.Add("Table", "Net-informations.com")
        DtSet = New System.Data.DataSet
        MyCommand.Fill(DtSet)
        DataGridView1.DataSource = DtSet.Tables(0)
        MyConnection.Close()

    End Sub
End Class

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多