在.net中写入CSV文件

Rus*_*ell 42 .net c# csv

我需要将数据集导出为CSV文件.

我花了一段时间搜索一组规则,并意识到编写CSV文件时有很多规则和例外.

http://knab.ws/blog/index.php?/archives/3-CSV-file-parser-and-writer-in-C-Part-1.html http://bytes.com/topic/c- sharp/answers/236875-problems-streamwriter-output-csv http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/0073fcbb-adab-40f0-b768-4bba803d3ccd

所以现在不是用逗号分隔字符串的简单过程,我已经搜索了现有的CSV编写器,无论是第三方还是(希望!)都包含在.net框架中.

编辑:新链接:http: //www.thinqlinq.com/Post.aspx/Title/LINQ-to-CSV-using-DynamicObject-and-TextFieldParser

TextFieldParser是一个VB对象(可以从C#引用),它将自动解析CSV文件.:)

我想知道是否有人知道任何方便的.Net(2.0 - > 3.5和4.0)库可用于生成格式正确的CSV文件.

此外,如果有任何规则集用于生成CSV文件.

有很多关于CSV阅读器和解析CSV文件的细节,但是没有多少关于写作(好吧,我知道它正好相反:P).

http://www.codeproject.com/KB/database/CsvReader.aspx

任何帮助将非常感激 :)

我发现了另一篇文章,其中包含一些更详细的CSV规则:http: //www.creativyst.com/Doc/Articles/CSV/CSV01.htm

一个简洁的第三方库是Linq-to-CSV(非框架库):http: //www.codeproject.com/KB/linq/LINQtoCSV.aspx

谢谢大家的帮助.我已经决定最好的解决方案是创建一个简单的静态类,它将进行特殊的字符替换(Chris提到).

如果我需要Linq查询我的CSV文件,我会查看Linq-to-CSV的CodeProjects实现.

再次感谢 :)

Jos*_*ose 48

CsvHelper(我维护的库)也可以通过NuGet获得.

CsvHelper可以自动将您的类对象写入文件.

var myObj = new MyCustomClass
{
    Prop1 = "one",
    Prop2 = 2
};
var streamWriter = // Create a writer to somewhere...
var csvWriter = new CsvWriter( streamWriter );

// You can write a single record.
csvWriter.WriteRecord( myObj );

// You can also write a collection of records.
var myRecords = new List<MyCustomClass>{ myObj };
csvWriter.WriteRecords( myRecords );
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 21

如果您的单元格中有逗号,请用双引号括住整个单元格,例如:

cell 1,cell 2,"This is one cell, even with a comma",cell4,etc
Run Code Online (Sandbox Code Playgroud)

如果你想要一个双字引号,可以做两个,例如:

cell 1,cell 2,"This is my cell and it has ""quotes"" in it",cell 4,etc
Run Code Online (Sandbox Code Playgroud)

至于日期,坚持ISO格式,你应该没事(例如yyyy-mm-dd hh:mm:ss)

  • 根据http://en.wikipedia.org/wiki/Comma-separated_values,如果您需要严格要求,这个答案可以简化CSV格式要求的实际情况. (7认同)
  • 它们本身就是唯一的"规则"吗?例如换行怎么样?您知道有关这些规则/要求的任何参考资料吗?我假设(来自搜索)这些文件类型没有标准,只是专有要求(例如,什么适用于excel:P).感谢您的输入. (2认同)
  • BTW关于日期:你引用的不是ISO格式(ISO 8601使用`T`,而不是日期和时间之间的分隔空间) (2认同)

Ric*_*ber 18

我想添加一个指定CSV格式的RFC,这是我认为的规范来源.


lom*_*axx 6

我用filehelpers广泛,它是生成的CSV相当真棒.