C# 中是不是有任何 CSV 读取器/写入器库? [关闭]
Posted
技术标签:
【中文标题】C# 中是不是有任何 CSV 读取器/写入器库? [关闭]【英文标题】:Are there any CSV readers/writer libraries in C#? [closed]C# 中是否有任何 CSV 读取器/写入器库? [关闭] 【发布时间】:2010-12-28 19:45:07 【问题描述】:C# 中是否有 CSV 读取器/写入器库?
【问题讨论】:
我不同意。这绝对是一个建设性的问题,也是谷歌上.net csv library
的第一个结果。证据,虽然是轶事,但我声称这个问题在过去六年中被浏览了超过 22000 次。
真说-谷歌第一击
有一个不错的速度比较:joelverhagen.com/blog/2020/12/fastest-net-csv-parsers
【参考方案1】:
试试CsvHelper。它与 FastCsvReader 一样易于使用,并且也可以编写。过去我对 FastCsvReader 非常满意,但我也需要一些可以写的东西,而且对 FileHelpers 不满意。
阅读:
var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();
写作:
var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );
完全披露:我是这个库的作者。
【讨论】:
谢谢,乔希。我试了一下,它既快速又节省内存。我认为对于初次使用的用户来说,文档可以稍微改进一下,但绝对足够了。 有没有办法在没有自定义类型的情况下使用这个库,这样我就可以遍历我的表格网格(自定义)并写出标题,然后传递每个行字段?我只是在寻找一种方法来防止文件中的错误(正确转义等)。 是的。您可以使用WriteField
。在此处查看文档joshclose.github.io/CsvHelper
@Zimano 不正确。您可以读取单个字段,甚至只获取该行的字符串数组。查看文档。 joshclose.github.io/CsvHelper
@JoshClose 哦,很高兴听到这个消息,谢谢!我只在这里查看了入门指南:joshclose.github.io/CsvHelper/…,它不包括我的用例。我应该看得更远,我很抱歉。但是,在该页面上确实说使用某种映射是使用CsvHelper
的推荐方式。也许它可以在那个地方提供一些替代阅读策略?顺便说一句,我已经删除了我原来的评论,因为它现在无关紧要:-)【参考方案2】:
框架本身有几个选项。
最简单的方法之一是引用 Microsoft.VisualBasic,然后使用 TextFieldParser。它是核心框架中功能齐全的 CSV 阅读器。
另一个不错的选择是use datasets to read CSV files。
【讨论】:
我一直想知道为什么它在 Microsoft.VisualBasic 程序集中... MS 认为 C# 开发人员不使用 CSV 吗? @Thomas:特别是因为许多 C# 开发人员对在他们的项目中包含 VisualBasic 程序集的想法感到畏缩 是的 - 里面有很多不错的“好东西”。我认为这更多是因为 VB 有一些最初在框架中没有真正考虑过的语言结构,但如果不实施它们,他们永远无法让 VB6 用户了解它们。 Devices 和 ApplicationServices 命名空间有各种有用的东西。 @Roboto,任何对在他们的项目中引用 Microsoft.VisualBasic 感到畏缩的 C# 开发人员都是无知的语言势利小人。更糟糕的是,他们根本不懂 .NET。 另一个 VB 程序集 gem 是 CopyDirectory:***.com/questions/58744/…【参考方案3】:Sebastien Lorion 在 CodeProject 上有一个很棒的 CSV
阅读器,名为 A Fast CSV Reader。可能是 C# 中最好的之一,而且它是免费的。
就写作而言,只需使用StreamWriter
。
下面是一些将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();
;
【讨论】:
这是我的最爱。很棒的小图书馆。 编写 CSV 文件很容易 - 只需使用普通的文本输出方法,并用逗号分隔。你真的只需要一个库/自定义处理程序来阅读...... @Reed:如果您想正确转义逗号和引号,这并不是一件容易的事。我什至不确定这是否有标准化,但这样做很常见。 编写 CSV 比这要复杂一些。如果您希望在 CSV 文件中表达的数据包含逗号或换行符,则需要用引号将数据括起来。如果新加引号的数据中有引号,则需要用双引号将引号转义。您当然可以自己编写该逻辑,但最好有一个库为您编写代码。 标准化为 RFC 4180。tools.ietf.org/html/rfc4180【参考方案4】:是的 - 虽然我假设您实际上是在询问具体情况?
试试FileHelpers
【讨论】:
好吧,我做到了,但出于某种奇怪的原因,FileHelpers 随机崩溃了。此外,FileHelpers 库已经很久没有开发了。 FileHelpers 现在正在积极开发中,请参阅GitHub。【参考方案5】:有几十个。
http://www.filehelpers.net/ 是最常见的一种。
我应该说我发现 Filehelpers 在某些情况下受到限制,而是使用The Fast CSV Reader。根据我的经验,如果您直到运行时才知道 CSV 文件的格式或导入映射 - 这是更好的库。
【讨论】:
我们也使用文件助手。 我发现 FileHelpers 配置起来很麻烦。 FastCsvReader 更容易使用。 +1 用于 FastCsvReader。完美的表现。但它主要是一个阅读器/解析器。不是作家。以上是关于C# 中是不是有任何 CSV 读取器/写入器库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章