C#的CSV解析器/读取器?

88

是否有一种好的、免费的CSV解析器的实现,可在某些宽松的许可下使用? 例如Java中的SuperCSV的对应物,可能是一个端口?


2
https://dev59.com/nnA75IYBdhLWcg3wB0VP - user295190
5
使用 Microsoft.VisualBasic.FileIO.TextFieldParser; - user295190
1
不建设性?SO管理员太疯狂了。这是一个非常有帮助的问题。 - richard
6个回答

71

24
FileHelpers(至少对于CSV格式)要求“定义一个映射到源文件中记录的类”,“必须声明一个记录映射类”等。这并不是很理想。我想将CSV转换为DataTable,但不知道预期有多少列。 - Konrad Morawski

53

CodeProject上有一个很好的实现:

为了给更具体的数字,处理一个包含145个字段和50,000条记录的45 MB CSV文件时,读取器大约每秒处理30 MB。所以总体而言,这只需要1.5秒!机器规格为P4 3.0 GHz,1024 MB。


(收回我的+1):我刚刚在一个53Mb的文件上破坏了lumenworks Fast CSV reader。看起来在43000行后,行缓存失败并且导致了缓冲区混乱。尝试了Microsoft.VisualBasic.FileIO.TextFieldParse,它解决了问题。 - iCollect.it Ltd

12

你可以将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库。顺便说一下,以下内容包含了ODBC和OLEDB的附加代码示例:http://www.csvreader.com/csv_benchmarks.php - Meringros
5
这在64位系统上无法工作,哎。 - DenNukem

7

尝试使用filehelpers。它非常好用。我每天都使用它来解析一个100MB的文件。


4

3
我开始使用CSV解析器,它是CommonLibrary.NET的一部分。
它使用.NET 3.5,具有易于使用的API和方便的迭代重载/方法和lambda。
我没有像上面那样的任何基准测试,但这个好处是它只是类似于Java Commons的库中的一个组件。因此,我还可以获得命令行解析器、存储库实现等其他功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接