Анализатор / считыватель CSV для C #? [закрыто]

89

есть ли хорошая и бесплатная реализация парсера CSV, доступная под какой-либо либеральной лицензией? Какой-то аналог SuperCSV для Java, возможно, порт?

Бартош Радачиньски
источник
5
используя Microsoft.VisualBasic.FileIO.TextFieldParser;
1
Не конструктивно? ТАК админы такие сумасшедшие. Это ОЧЕНЬ полезный вопрос.
Ричард

Ответы:

70

FileHelpers Open Source Library .

Keltex
источник
24
FileHelpers (по крайней мере для CSV) требует, чтобы вы «определяли класс, который сопоставляется с записью в источнике (файле)», «вы должны объявить класс сопоставления записи» и т. Д., И это не так уж и важно. Я хотел бы преобразовать CSV в DataTable, не зная заранее, сколько столбцов ожидать.
Конрад Моравски
53

На CodeProject есть хорошая реализация :

Чтобы дать более точные цифры, с 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 не работает.

Максим
источник
1
у меня это сработало очень хорошо, так как я хотел остаться со встроенными библиотеками ODBC или OLEDB. Кстати, ниже приведены дополнительные образцы кода для OLEDB и ODBC: csvreader.com/csv_benchmarks.php
Meringros
5
Увы, это не работает на 64-битной версии.
DenNukem
7

попробуйте filehelpers Работают на удивление хорошо. Я использую его для разбора файла размером 100 МБ каждый день.

ни один. Никто
источник
4

Вы пробовали библиотеку FileHelpers? Это бесплатно, с открытым исходным кодом и может использоваться для анализа файлов CSV.

ДжаредПар
источник
3

Я начал использовать парсер CSV, который является частью CommonLibrary.NET .

Он использует .NET 3.5, имеет простой API и удобные перегрузки / методы и lamda для итераций.

У меня нет никаких тестов для этого, как указано выше, но приятно то, что это всего лишь один компонент библиотеки, подобной Java Commons. Так что я также получаю синтаксический анализатор командной строки, реализацию репозитория среди прочего.

Чжао
источник