C#的好CSV编写器?

C#的好CSV编写器?,c#,C#,可能重复: 有适合C#的好CSV作者吗 不需要读者,只需要作者。这本书没什么大不了的,真的。。。以下是我使用了几年的一些代码: public static class Csv { public static string Escape( string s ) { if ( s.Contains( QUOTE ) ) s = s.Replace( QUOTE, ESCAPED_QUOTE ); if ( s.IndexOf

可能重复:

有适合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' };
}
可以使用转义方法确保正确引用值。我将这个类与一个简单的读者结合使用,但是你说你不需要这个

Update很简单,但它不仅仅是
string.Join
。但是,如果您有一个
值数组
(并且正在使用C#3+),那么您仍然可以通过一些非常简单的方法逃脱:


写作是相当琐碎的,但是图书馆可以为你做很多好事。例如写出自定义对象

下面是一个(我维护的库)写入对象的示例

// 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 );

具体来说,这句话:对不起我的坏。注释删除引用和转义不是更容易吗?或者这是为了节省文件大小还是什么?我想你可以引用并转义所有内容,但这不是很优雅。只要我的SQL数据库了解如何导入它,一切都很好。在实际转义之前测试是否存在需要转义的字符真的更快吗?看起来不管发生什么,它都必须通读字符串,如果没有什么可以逃避的话,我想它不会再慢了。稍后我可能会亲自测试一下,但如果有人知道,请告诉我。@BrandonMoore,这是个好问题。如果
String.Replace
工作正常,可能会更好。我是这样写的,因为
string
是不可变的,所以Replace每次都会给您一个新实例(即使它不进行替换)。您必须查看
String.Replace的实现才能确定。当然,当角色确实需要转义时,您需要一个新实例,但我也假设这是一个例外情况。好东西。很高兴它很容易注入和模仿。伟大的库,使从一个对象构建csv变得如此简单。建议在IO操作中使用
。这是一个很好的用法示例。
// 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