C#中是否有任何CSV读取器/写入器库?[关闭]


111

C#中是否有任何CSV读取器/写入器库?


68
我不敢苟同。这绝对是一个建设性的问题,也是google for的第一个结果.net csv library。有证据表明,尽管我认为这是一个轶事,但在过去六年中,这个问题已被查看了22000多次。
shovavnik '16

5
真实地说-谷歌的第一击
Robetto

Answers:


107

试试CsvHelper。它与FastCsvReader一样易于使用,并且也可以编写。过去,我对FastCsvReader感到非常满意,但是我也需要编写一些东西,而对FileHelpers却不满意。

读:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

写作:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

完全披露:我是这个图书馆的作者。


3
谢谢,乔希。我试了一下,它既快速又高效。我认为对于初次使用的用户,文档可能会有所改进,但是绝对足够。
山姆

有没有一种方法可以使用没有自定义类型的该库,以便我可以遍历表网格(自定义)并写出标题,然后传递每个行字段?我只是在寻找一种方法来防止文件中的错误(正确转义等)。
u84six

是。您可以使用WriteField。在此处查看文档joshclose.github.io/CsvHelper
Josh关闭

1
@Zimano不正确。您可以读取单个字段,甚至可以仅获取该行的字符串数组。查看文档。joshclose.github.io/CsvHelper
Josh Close

@JoshClose哦,真高兴,谢谢!我只在这里签出了入门指南:joshclose.github.io/CsvHelper/…,但其中不包括我的用例。抱歉,我应该再看一下。但是,在该页面上确实表明建议使用某种映射CsvHelper。也许它可以提供一些另类的阅读策略?顺便说一句,我已经删除了我的原始发言,因为它已经不相关了:-)
Zimano

21

在框架本身中有两个选择。

最简单的方法之一是引用Microsoft.VisualBasic,然后使用TextFieldParser。它是核心框架中的全功能CSV阅读器。

另一个不错的选择是使用数据集读取CSV文件


6
我一直想知道为什么它出现在Microsoft.VisualBasic程序集中……MS是否认为C#开发人员没有使用CSV?
Thomas Levesque

4
@Thomas:尤其是因为许多C#开发人员都

2
是的-那里有很多不错的“好东西”。我认为这更多是因为VB最初没有在框架中真正考虑过某些语言结构,但是如果不实施VB6用户,他们将永远无法吸引他们。Devices和ApplicationServices命名空间具有各种有用的东西。
里德·科普西

20
@Roboto,任何在其项目中不愿引用Microsoft.VisualBasic的C#开发人员,都是无知的语言势利小人。更糟糕的是,他们根本不了解.NET。
灰烬

3
另一个VB装配宝石CopyDirectory:stackoverflow.com/questions/58744/...

17

Sebastien Lorion CSV在CodeProject上拥有出色的阅读器,称为A Fast CSV Reader。可能是C#最好的之一,它是免费的。

就写作而言,只需使用即可StreamWriter

以下是一些用于将a写入DataGridView文件的样板代码:

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
这是我最喜欢的。很棒的小图书馆。
亚历克斯

2
编写CSV很容易-只需使用常规的文本输出方法,并以逗号分隔即可。您确实只需要一个图书馆/自定义处理程序即可阅读...
Reed Copsey

10
@Reed:如果您想正确地使用逗号和引号将其转义,这并不是太琐碎。我什至不确定是否有标准化的方法,但是这样做很普遍。
Stefan Steinegger,2009年

26
编写CSV比这要复杂一些。如果要在CSV文件中表示的数据包含逗号或换行符,则需要在数据两边加上引号。如果在新的带引号的数据中有一个引号,则需要用双引号使转义符转义。您当然可以自己编写逻辑代码,但是对于图书馆来说,这样做很不错。
Tinister


7

是的-尽管我认为您实际上是在要求提供详细信息?

试试FileHelpers


好吧,我做到了,但是出于某些奇怪的原因,FileHelpers随机崩溃了。此外,FileHelpers库很久没有开发。
Erik Schierboom 2011年

1
FileHelpers现在正在积极开发中,请参阅GitHub
xmedeko '16

3

有几十个。

http://www.filehelpers.net/是最常见的网站之一。

我应该说,我发现Filehelpers在某些情况下是限制性的,而是使用The Fast CSV Reader。以我的经验,如果在运行时之前不知道CSV文件的格式或导入映射,那么这是更好的库。


我们也使用filehelper。
Tangurena,

1
我发现FileHelpers令人讨厌配置。FastCsvReader易于使用。
乔什(Josh Close)2010年

+1为FastCsvReader。完美的表现。但这主要是阅读器/解析器。不是作家。
Mehdi LAMRANI 2011年
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.