Существует несколько инструментов для анализа этого типа файлов. Один из них - OleDB.
Я не могу понять, как работает (удаленный) ответ, потому что HDR=No;
сообщает текстовому драйверу, что первая строка не содержит имен столбцов. Но это иногда игнорируется после того, как он считывает первые 8 строк без IMEX.
Однако FMT=Delimited\"""
выглядит так, как будто он был скопирован из ответа C#, потому что VB не использует \
, чтобы избежать символов. Также похоже, что он смешивает разделитель столбцов (запятая или табуляция в этом случае) и разделитель текста (обычно "
)
Если файл имеет разделитель табуляции, то правильным значением будет FMT=TabDelimited
. Я предполагаю, что поля представляют собой текст, ограниченный кавычками (например, "France" "Paris" "2.25"
), а OleDB измельчает данные кавычками, а не вкладками, чтобы случайно получить тот же результат.
Правильная строка ACE будет:
Dim connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Temp';Extended Properties='TEXT;HDR=Yes;FMT=TabDelimited';"
Используя только строку соединения будет импортировать каждый подал в виде строки. Вы также можете преобразовать данные OleDB в любой тип данных, который он предназначен, чтобы вам не пришлось мутировать ваш код множеством Convert.ToXXXX
, чтобы преобразовать данные String
в любой.
Для определения файла необходимо использовать Schema.INI
. Это заменяет большую часть расширенных свойств в строке соединения, оставляя только Extended Properties='TEXT';"
(что означает использование драйвера TEXT). Создание имени файла Schema.INI
в той же папке, что и данные:
[Capitals.txt]
ColNameHeader = True
CharacterSet = 437
Format = TabDelimited
TextDelimiter =»
DecimalSymbol =
. CURRENCYSYMBOL = $
Col1 = "Страна" Текст Ширина 254
Col2 = "Город Столиц" Текст Ширина 254
Col3 =» Population»Single
COL4 = "фальшивый" Integer
Один Schema.INI
может содержать макет для многих файлов. Каждый файл имеет свой собственный раздел под названием с именем файла (например,[FooBar.CSV]
, [Capitals.txt]
и т.д.)
Большинство записей должны быть понятны, но FORMAT
определяет разделитель столбцов (TabDelimited
, CSVDelimited
или пользовательские Delimited(;)
); TextDelimiter
- символ используется для помещения данных столбца, когда он может содержать пробелы или другие специальные символы. Такие вещи, как CurrencySymbol
, позволяют вам использовать внешний символ и могут быть опущены.
В списках ColN=
вы можете переименовать столбцы и указать тип данных. Это может оказаться утомительным для ввода более 100 столбцов, однако, вероятно, это будет главным образом копирование и вставка. Как только это будет сделано, вы всегда будете иметь его и сможете легко использовать типизированные данные.
Вам не нужно указывать имена столбцов/размер/тип использовать Schema.ini Если файл содержит имена столбцов в качестве первой строки (ColNameHeader = True), вы можете использовать схему, чтобы просто указать различные параметры в понятном и понятном виде, а не сжимать их в строку соединения.
OleDB ищет Schema.ini в той же папке, что и файл импорта, а затем ищет раздел подшипником точное название «таблицы», используемый в SQL:
' form level DT var
Private capDT As DataTable
' procedure code to load the file:
Dim connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Temp';Extended Properties='TEXT';"
Dim SQL = "SELECT * FROM Capitals.txt"
capDT = New DataTable
' USING will close and dispose of resources
Using cn As New OleDbConnection(connstr),
cmd As New OleDbCommand(SQL, cn)
cn.Open()
Using da As New OleDbDataAdapter(cmd)
da.Fill(capDT)
End Using
End Using ' close and dispose
DataTable
является теперь готов к использованию. Если перебирать столбцы, вы можете видеть, что они соответствуют типу, указанному в схеме:
' display data types
For n As Int32 = 0 To capDT.Columns.Count - 1
Console.WriteLine("name: {0}, datatype: {1}",
capDT.Columns(n).ColumnName,
capDT.Columns(n).DataType.ToString)
Next
Выход:
Имя: Страна, тип данных: System.String
имя: Город столиц, тип данных : System.String
название: Население, тип данных: System.Single
имя: Поддельные, тип данных: System.Int32
Смотрите также:
OleDB прочтет этот тип файла, создать DataTable, который можно привязать к DGV – Plutonix