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


89

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



5
используя Microsoft.VisualBasic.FileIO.TextFieldParser;


1
Не конструктивно? ТАК админы такие сумасшедшие. Это ОЧЕНЬ полезный вопрос.
Ричард

Ответы:


70

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




3

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.