Вопрос по vb.net, csv, import, multidimensional-array, datatable – преобразовать данные CSV в DataTable в VB.net

6

Я пытаюсь импортировать большой массив целых чисел, хранящихся в виде файла CSV, в таблицу данных VB.Net под названиемBeamMap, Файл .csv состоит только из целых чисел с разделителем,, без кавычек вокруг данных (т.е.1,3,-2,44,1) и символ конца строки перевода строки и возврата каретки. Все, что я хочу сделать, это получить каждое целое число в ячейке DataTable с соответствующими строками и столбцами (количество столбцов в каждой строке одинаковое) и иметь возможность ссылаться на него позже в моем коде. Я действительно не хочу ничего больше, чем абсолютно необходимо в коде (без заголовков, подписей, заголовков и т. Д.), И мне нужно, чтобы оно было достаточно эффективным (массив csv составляет приблизительно ~ 1000 x ~ 1000).

Спасибо!

@AVD: как? Это, вероятно, было бы хорошо, чтобы поставить в качестве ответа. Matt

Ваш Ответ

4   ответа
15

использование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
4

Вот простой подход, который требует строгого формата (как вы упомянули):

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 после разделителя в строке три? Кроме того, я сделал бы это функцией или sub? Matt
@matt: Да, это буквенный символ, такой же, как'c' в C #. Я не понимаю ваш другой вопрос. Это зависит от ваших требований, относится ли это к функции или подпрограмме. Он просто создает DataTable из CSV-файла, ни больше, ни меньше. Вы можете вернуть его или сделать с ним все, что вам нужно.
C является буквенным символом в VB.
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

Похожие вопросы