Parser / czytnik CSV dla C #? [Zamknięte]


89

czy istnieje dobra i bezpłatna implementacja parsera CSV na jakiejś liberalnej licencji? Jakiś odpowiednik SuperCSV dla Java, być może port?



5
using Microsoft.VisualBasic.FileIO.TextFieldParser;


1
Nie konstruktywne? Administratorzy SO są tacy szaleni. To BARDZO pomocne pytanie.
richard,

Odpowiedzi:


70

24
FileHelpers (przynajmniej dla CSV) wymaga, abyś „zdefiniował klasę, która odwzorowuje rekord w źródle (pliku)”, „musisz zadeklarować klasę mapowania rekordów” itd. I to nie jest takie gorące. Chciałbym przekonwertować CSV na DataTable, nie wiedząc z góry, ile kolumn się spodziewać.
Konrad Morawski

53

W CodeProject jest ładna implementacja :

Aby podać bardziej przyziemne liczby, w pliku CSV o rozmiarze 45 MB zawierającym 145 pól i 50 000 rekordów czytnik przetwarzał około 30 MB / s. W sumie zajęło to 1,5 sekundy! Specyfikacje maszyny to P4 3,0 GHz, 1024 MB.


(odzyskując moje +1): Właśnie zepsułem czytnik Lumenworks Fast CSV na pliku 53Mb. Wygląda na to, że buforowanie wiersza nie powiodło się po 43 000 wierszy i zaszyfrowało bufor. Próbowałem Microsoft.VisualBasic.FileIO.TextFieldParsei to załatwiło sprawę.
Gone Coding

11

Możesz załadować plik CSV do DataTable.

Przykładowy kod -

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;
}

Upewnij się, że kompilujesz swój projekt na procesor x86. Nie działa na x64.


1
działało to całkiem dobrze, ponieważ chciałem pozostać przy wbudowanych bibliotekach ODBC lub OLEDB. Przy okazji, poniżej znajdują się dodatkowe przykłady kodu zarówno dla OLEDB, jak i ODBC: csvreader.com/csv_benchmarks.php
Meringros

5
Niestety, to nie działa na 64 bitach.
DenNukem




3

Zacząłem używać CSV Parser, który jest częścią CommonLibrary.NET .

Używa .NET 3.5, ma łatwe API i wygodne przeciążenia / metody i lamda do iteracji.

Nie mam żadnych testów porównawczych dla tego, jak powyżej, ale fajną rzeczą jest to, że jest to tylko jeden składnik biblioteki podobnej do Java Commons. Dostaję więc między innymi parser wiersza poleceń, implementację repozytorium.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.