есть ли хорошая и бесплатная реализация парсера CSV, доступная под какой-либо либеральной лицензией? Какой-то аналог SuperCSV для Java, возможно, порт?
FileHelpers (по крайней мере для CSV) требует, чтобы вы «определяли класс, который сопоставляется с записью в источнике (файле)», «вы должны объявить класс сопоставления записи» и т. Д., И это не так уж и важно. Я хотел бы преобразовать CSV в DataTable, не зная заранее, сколько столбцов ожидать.
Чтобы дать более точные цифры, с CSV-файлом размером 45 МБ, содержащим 145 полей и 50 000 записей, считыватель обрабатывал около 30 МБ / с. В общем, на это ушло 1,5 секунды! Технические характеристики машины: P4 3,0 ГГц, 1024 МБ.
(забирая свой +1): Я только что сломал читалку lumenworks Fast CSV на 53-мегабайтном файле. Похоже, что кэширование строки завершилось неудачно после 43000 строк и зашифрованного буфера. Попробовал, Microsoft.VisualBasic.FileIO.TextFieldParseи это сработало.
Gone Coding
11
Вы можете загрузить файл CSV в DataTable.
Образец кода -
static DataTable CsvToDataTable(string strFileName)
{
DataTable dataTable = new DataTable("DataTable Name");
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""))
{
conn.Open();
string strQuery = "SELECT * FROM [" + strFileName + "]";
OleDbDataAdapter adapter =
new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
adapter.Fill(dataTable);
}
return dataTable;
}
Убедитесь, что вы скомпилировали свой проект для процессора x86. На x64 не работает.
у меня это сработало очень хорошо, так как я хотел остаться со встроенными библиотеками ODBC или OLEDB. Кстати, ниже приведены дополнительные образцы кода для OLEDB и ODBC: csvreader.com/csv_benchmarks.php
Я начал использовать парсер CSV, который является частью CommonLibrary.NET .
Он использует .NET 3.5, имеет простой API и удобные перегрузки / методы и lamda для итераций.
У меня нет никаких тестов для этого, как указано выше, но приятно то, что это всего лишь один компонент библиотеки, подобной Java Commons. Так что я также получаю синтаксический анализатор командной строки, реализацию репозитория среди прочего.
Ответы:
FileHelpers Open Source Library .
источник
На CodeProject есть хорошая реализация :
источник
Microsoft.VisualBasic.FileIO.TextFieldParse
и это сработало.Вы можете загрузить файл CSV в DataTable.
Образец кода -
static DataTable CsvToDataTable(string strFileName) { DataTable dataTable = new DataTable("DataTable Name"); using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"")) { conn.Open(); string strQuery = "SELECT * FROM [" + strFileName + "]"; OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn); adapter.Fill(dataTable); } return dataTable; }
Убедитесь, что вы скомпилировали свой проект для процессора x86. На x64 не работает.
источник
попробуйте filehelpers Работают на удивление хорошо. Я использую его для разбора файла размером 100 МБ каждый день.
источник
Вы пробовали библиотеку FileHelpers? Это бесплатно, с открытым исходным кодом и может использоваться для анализа файлов CSV.
источник
Я начал использовать парсер CSV, который является частью CommonLibrary.NET .
Он использует .NET 3.5, имеет простой API и удобные перегрузки / методы и lamda для итераций.
У меня нет никаких тестов для этого, как указано выше, но приятно то, что это всего лишь один компонент библиотеки, подобной Java Commons. Так что я также получаю синтаксический анализатор командной строки, реализацию репозитория среди прочего.
источник