Хороший CSV Writer для C #?

Возможный дубликат:
Запись CSV-файла в .net

Есть ли хорошие CSV-писатели для C #?

Не нужен читатель, просто писатель.

Там не так много, действительно … вот какой код я использовал в течение нескольких лет:

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, чтобы гарантировать, что значения правильно указаны. Я использую этот class вместе с простым читателем, но вы сказали, что вам это не нужно …

Обновление Это просто, но для него есть нечто большее, чем string.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