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