2012-06-20 44 views
6

我试图导入一个大型数组作为csv文件存储到VB.Net DataTable称为BeamMap。 .csv文件仅由整数组成,其分隔符为,,数据周围没有引号(即1,3,-2,44,1),并且换行符和回车符的行结束符。我想要做的就是将每个整数转换为具有适当行和列的DataTable单元格(每行有相同数量的列),并且可以稍后在我的代码中引用它。我真的不想要任何超过代码中绝对必要的东西(没有标题,标题,标题等),我需要它非常高效(csv数组大约为1000 x〜1000)。将csv数据转换为VB.net中的DataTable

谢谢!

+0

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

回答

3

这里有一个简单的做法,规定了严格的格式(如你所提到的):

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 
+0

第三行的分隔符后面的“c”是什么?另外,我会做这个功能或子? – Matt

+1

C是VB中的char字面量。 – adatapost

+1

@matt:是的,它是一个char字面量,与C#中的'c'相同。我不明白你的其他问题。这取决于您的要求,如果属于一个功能或子。它只是从csv文件创建一个DataTable,不多也不少。你可以退还或做任何你需要做的事情。 –

12

使用OleDb提供商读取CSV和pouplate的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 
0

而且,不要忘了包括

Imports System.Data.OleDb 

,如果你想链接到一个DataGridView(阅读后):从

Dim bs As New BindingSource 
bs.DataSource = dt 
DataGridView1.DataSource = bs 
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