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 到数据表的主要内容,如果未能解决你的问题,请参考以下文章