在VB.net中将CSV数据转换为DataTable

7
我正在尝试将一个大的整数数组(以csv文件存储)导入到名为BeamMap的VB.Net DataTable中。该.csv文件仅由整数组成,分隔符为,,数据周围没有引号(即1,3,-2,44,1),每行末尾都有回车和换行字符。我想要做的就是将每个整数放入DataTable单元格中,以及相应的行和列(每行的列数相同),并且能够在我的代码中稍后引用它。我不需要代码中多余的部分(例如标题、说明等),并且需要它相对高效(csv数组大小约为1000 x 1000)。谢谢!

@AVD:怎么做?把这个作为答案可能是一个不错的选择。 - Matt
4个回答

17

使用 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

6
这里有一个简单的方法,需要严格按照格式要求(正如您所提到的):
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
1
@matt:是的,它是一个字符字面量,就像C#中的'c'一样。我不明白你的另一个问题。如果这个东西符合你的要求,那么它可以放在一个函数或子程序中。它只是从CSV文件创建一个DataTable,没有多余的东西。你可以返回它或者对它进行任何你需要做的操作。 - Tim Schmelter

1
从映射驱动器获取文件,并将检索到的数据放入数据集中:
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

0

另外,不要忘记包含

Imports System.Data.OleDb

如果您想在读取后链接到 DataGridView:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接