har*_*rpo 46
它没有多少,真的......这是我用了几年的一些代码:
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' };
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Escape方法确保正确引用值.我将这个课程与一个简单的读者结合使用,但你说你不需要......
更新它很简单,但它还有更多string.Join.但是,如果你有一个values(并使用C#3+)数组,你仍然可以使用非常简单的东西:
string.Join(",", values.Select(Csv.Escape));
Run Code Online (Sandbox Code Playgroud)
Jos*_*ose 13
写作相当简单,但是图书馆可以为你做很多好事.比如写出自定义对象.
这是一个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 );
Run Code Online (Sandbox Code Playgroud)
默认情况下,约定用于编写标头.这都是可配置的.
// Output:
StringProperty,IntProperty
one,1
two,2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28106 次 |
| 最近记录: |