用于C#的CSV解析器/阅读器?[关闭]


89

在某些自由许可下,是否可以很好且免费地实现CSV解析器?Java 的SuperCSV的对应版本,也许是端口?



5
使用Microsoft.VisualBasic.FileIO.TextFieldParser;


1
不是建设性的?因此,管理员是如此疯狂。这是一个非常有帮助的问题。
里查德2014年

Answers:


70

24
FileHelpers(至少适用于CSV)要求您“定义一个映射到源(文件)中的记录的类”,“您必须声明一个记录映射类”等,这并不是很热门。我想将CSV转换为DataTable,但不事先知道期望多少列。
Konrad Morawski 2011年

53

CodeProject有一个不错的实现:

为了提供更多具体数字,一个45 MB的CSV文件包含145个字段和50,000条记录,阅读器正在以大约30 MB /秒的速度处理。因此,总共花了1.5秒!机器规格为P4 3.0 GHz,1024 MB。


(收回我的+1):我刚刚在一个53Mb的文件上打破了lumenworks Fast CSV阅读器。看起来行缓存在43,000行之后失败,并扰乱了缓冲区。尝试了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,2010年

5
64,这不适用于64位。
DenNukem 2012年




3

我已经开始使用CommonLibrary.NET的 CSV分析器。

它使用.NET 3.5,具有简单的API,并具有方便的重载/方法和用于迭代的lamda。

我没有像上面这样的基准,但是它的好处是它只是与Java Commons类似的库的一个组件。因此,我还获得了命令行解析器,存储库实现等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.