CSV parser/reader for C#? [closed]
Asked Answered
S

6

88

is there a good and free implementation of CSV parser available under some liberal licence? Some counterpart of SuperCSV for Java, perhaps a port?

Sexagenary answered 25/5, 2009 at 14:0 Comment(3)
https://mcmap.net/q/11066/-reading-csv-files-using-cSpirillum
using Microsoft.VisualBasic.FileIO.TextFieldParser;Spirillum
Not constructive? SO admins are so crazy. This is a VERY helpful question.Immoderacy
F
71

FileHelpers Open Source Library.

Franklinfranklinite answered 25/5, 2009 at 14:4 Comment(1)
FileHelpers (for CSV at least) requires that you "define a class that maps to the record in the source (file)", "you must declare a Record Mapping Class" etc. and this is not so hot. I'd like to convert CSV into a DataTable, not knowing in advance how many columns to expect.Subminiaturize
E
53

There's a nice implementation on CodeProject:

To give more down to earth numbers, with a 45 MB CSV file containing 145 fields and 50,000 records, the reader was processing about 30 MB/sec. So all in all, it took 1.5 seconds! The machine specs were P4 3.0 GHz, 1024 MB.

Emmaemmalee answered 25/5, 2009 at 14:5 Comment(1)
(taking back my +1): I just broke the lumenworks Fast CSV reader on a 53Mb file. Looks like the line caching failed after 43,000 rows and scrambled the buffer. Tried the Microsoft.VisualBasic.FileIO.TextFieldParse and it did the trick.Alabama
P
12

You can load a CSV file to DataTable.

Sample code -

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

Make sure you compile your project to x86 processor. It doesn't work for x64.

Parke answered 28/6, 2010 at 8:21 Comment(3)
this worked pretty well for me since I wanted to stay with the built-in ODBC or OLEDB libraries. Btw, the following has additional code samples for both OLEDB and ODBC: csvreader.com/csv_benchmarks.phpYokel
This is not working on 64 bit, alas.Charybdis
Two links that maybe useful with regards to this answer: 1. C# Tutorial - Using The Built In OLEDB CSV Parser 2. How To Retrieve Column Schema by Using the DataReader GetSchemaTable Method and Visual C# .NETAsher
C
7

try filehelpers Work amazingly well. I am using it to parse a 100 MB file every day.

Carrefour answered 25/5, 2009 at 14:5 Comment(0)
M
4

Have you tried the FileHelpers library? It's free, open source and can be used to parse CSV files.

Metronome answered 25/5, 2009 at 14:5 Comment(0)
B
3

I've started using CSV Parser that is part of the CommonLibrary.NET.

It uses .NET 3.5, has an easy API, and convenient overloads/methods & lamda's for iterations.

I don't have any benchmarks for this one like above, but nice thing about this is that it's just one component of a library similar to Java Commons. So I also get a Command-line parser, Repository implementation among other things.

Blotch answered 11/2, 2010 at 12:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.