C#的优秀CSV编写器?

可能重复:
在.net中写入CSV文件

C#有没有好的CSV编写器?

不需要读者,只需要作家。

它没什么,真的……这里有几年我用过的代码:

public static class Csv { public static string Escape( string s ) { if ( s.Contains( QUOTE ) ) s = s.Replace( QUOTE, ESCAPED_QUOTE ); if ( s.IndexOfAny( CHARACTERS_THAT_MUST_BE_QUOTED ) > -1 ) s = QUOTE + s + QUOTE; return s; } public static string Unescape( string s ) { if ( s.StartsWith( QUOTE ) && s.EndsWith( QUOTE ) ) { s = s.Substring( 1, s.Length - 2 ); if ( s.Contains( ESCAPED_QUOTE ) ) s = s.Replace( ESCAPED_QUOTE, QUOTE ); } return s; } private const string QUOTE = "\""; private const string ESCAPED_QUOTE = "\"\""; private static char[] CHARACTERS_THAT_MUST_BE_QUOTED = { ',', '"', '\n' }; } 

您可以使用Escape方法确保正确引用值。 我将这个课程与一个简单的读者结合使用,但是你说你不需要……

更新它很简单,但它比string.Joinstring.Join 。 但是,如果你有一组values (并使用C#3+),你仍然可以使用非常简单的东西:

 string.Join(",", values.Select(Csv.Escape)); 

写作相当简单,但是图书馆可以为你做很多好事。 比如写出自定义对象。

以下是CsvHelper (我维护的库)编写对象的示例。

 // Custom object. public class MyCustomObject { public string StringProperty { get; set; } public int IntProperty { get; set; } } // Writing the CSV file. var myCustomObjectList = new List { new MyCustomObject { StringProperty = "one", IntProperty = 1 }, new MyCustomObject { StringProperty = "two", IntProperty = 2 } }; var csv = new CsvHelper( File.OpenWrite( "some-file.csv" ) ); csv.Writer.WriteRecords( myCustomObjectList ); 

默认情况下,约定用于编写标头。 这都是可配置的。

 // Output: StringProperty,IntProperty one,1 two,2