2012-06-20 30 views
6

Estoy tratando de importar una gran matriz de enteros almacenados como un archivo csv en un VB.Net DataTable llamado BeamMap. El archivo .csv consta solo de enteros, con un delimitador de ,, sin comillas alrededor de los datos (es decir, 1,3,-2,44,1) y un carácter de fin de línea de avance de línea y retorno de carro. Todo lo que quiero hacer es obtener cada número entero en una celda DataTable con las filas y columnas apropiadas (hay el mismo número de columnas para cada fila) y poder hacer referencia más adelante en mi código. Realmente no quiero nada más que absolutamente necesario en el código (sin títulos, subtítulos, encabezados, etc.), y necesito que sea bastante eficiente (el conjunto de csv es aproximadamente ~ 1000 x ~ 1000).convertir datos csv a DataTable en VB.net

Gracias!

+0

@AVD: ¿Cómo? Esto probablemente sería una buena cosa para poner como respuesta. – Matt

Respuesta

3

Aquí es un método sencillo que requiere un formato estricto (como se ha mencionado):

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

¿Cuál es la 'c' después del delimitador en la línea tres? Además, ¿haría esto una función o un sub? – Matt

+1

C es char literal en VB. – adatapost

+1

@matt: Sí, es un literal char, lo mismo que ''c'' en C#. No entiendo tu otra pregunta. Depende de sus requisitos si eso pertenece a una función o un sub. Simplemente crea una DataTable de un archivo csv, ni más ni menos. Puede devolverlo o hacer lo que tenga que hacer con él. –

12

proveedor de Uso OleDb leer CSV y pouplate la 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

Además, no se olvide de incluir el

Imports System.Data.OleDb 

Y si desea poner un enlace a un DataGridView (después de leer):

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

Conseguir el archivo desde un mapeado unidad y poner los datos recuperados en un conjunto de datos:

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