CSV 到数据表

Posted

技术标签:

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

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

我的 CSV 是这种格式

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

示例如下:

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

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 - ***.com/questions/6813607/… 【参考方案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

【讨论】:

以上是关于CSV 到数据表的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有值的行/列添加到数据表 csv 导出

如何将数据框导出到数据湖中的 CSV 文件? [复制]

如何将手机中的csv文件的内容导入到SQLite数据库中

CSV 到数据表

如何把csv文件批量导入到mysql数据库

java读取csv写入数据库