Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Там не так много, действительно... вот код, который я использовал несколько лет:

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.Join. Тем не менее, вы все равно можете уйти с чем-то довольно простым, если у вас есть массив values (и используете С# 3 +):

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

Ответ 2

Письмо довольно тривиально, но библиотеки могут делать много приятных вещей для вас. Например, выписывание пользовательских объектов.

Вот пример CsvHelper (библиотека, которую я поддерживаю), написание объектов.

// Custom object.
public class MyCustomObject
{
    public string StringProperty { get; set; }
    public int IntProperty { get; set; }
}

// Writing the CSV file.
var myCustomObjectList = new List<MyCustomObject>
{
    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