2012-06-20 11 views
6

Sto cercando di importare un grande array di numeri interi memorizzati come file csv in un DataTable VB.Net chiamato BeamMap. Il file .csv è costituito solo da numeri interi, con un delimitatore di ,, senza virgolette intorno ai dati (ad es., 1,3,-2,44,1) e un carattere di fine riga di avanzamento riga e ritorno a capo. Tutto quello che voglio fare è ottenere ogni numero intero in una cella DataTable con le righe e le colonne appropriate (ci sono lo stesso numero di colonne per ogni riga) ed essere in grado di fare riferimento in un secondo momento nel mio codice. Non voglio assolutamente nulla di più del necessario nel codice (niente titoli, sottotitoli, intestazioni, ecc.) E ho bisogno che sia abbastanza efficiente (l'array csv è approssimativamente ~ 1000 x ~ 1000).convertire i dati csv in DataBase in VB.net

Grazie!

+0

@AVD: come? Questa sarebbe probabilmente una buona cosa da mettere come risposta. – Matt

risposta

3

Ecco un approccio semplice, che richiede un formato rigoroso (come hai detto):

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

Qual è il 'c' dopo il delimitatore nella riga tre? Inoltre, dovrei rendere questa una funzione o una sub? – Matt

+1

C è un valore letterale in VB. – adatapost

+1

@matt: Sì, è un valore letterale, uguale a ''c'' in C#. Non capisco la tua altra domanda. Dipende dalle tue esigenze se questo appartiene a una funzione oa un sottotitolo. Crea semplicemente un DataTable da un file CSV, né più né meno. Puoi restituirlo o fare tutto ciò che devi fare con esso. –

12

Usa OleDb fornitore di leggere CSV e pouplate il 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

Inoltre, non dimenticare di includere il

Imports System.Data.OleDb 

E se si desidera collegare a un DataGridView (dopo lettura):

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

Ottenere il file da un mappati guidare e mettere i dati recuperati in un set di dati:

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