一个简单且极其快速的 CSV 读取器和写入器,支持读取和写入原始 CSV 值和类型化对象。
使用起来非常简单。下面是一个例子:
using Sky . Data . Csv ;
//reader and writer sample
using ( var reader = CsvReader . Create ( "path-to-file" ) ) {
using ( var writer = CsvWriter . Create ( "path-to-file" ) ) {
foreach ( var row in reader ) {
writer . WriteRow ( row ) ;
}
}
}
CsvReader
和CsvWriter
的Create
静态方法都可以接受第二个参数,指定一些选项,如缓冲区大小、编码、写入 CSV 文件时是否覆盖现有文件以及读取 CSV 文件时是否使用缓存等。
当 CSV 文件中的大多数行都是重复的时, CsvReaderSettings
类中的UseCache
选项非常有用。这个选项对提高性能有很大帮助。
此外, CsvReaderSettings
和CsvWriterSettings
都支持Separator
选项,您可以在读取或写入 CSV 文件时指定单元格分隔符。
如果您使用CsvReader<T>
和CsvWriter<T>
的通用版本,则Create
静态方法还将接受IDataResolver<T>
类型的参数,该参数支持CsvReader
和CsvWriter
读取和写入类型化对象。
AbstractDataResolver<T>
提供了带有一些基本实现的基类型,您可以创建它的子类。
public class Student
{
public String Name { get ; set ; }
public String Address { get ; set ; }
public Int32 Height { get ; set ; }
public DateTime Birthday { get ; set ; }
}
public class StudentResolver : AbstractDataResolver < Student >
{
public override Student Deserialize ( List < String > data )
{
var culture = CultureInfo . InvariantCulture ;
return new Student
{
Name = data [ 0 ] ,
Height = Int32 . Parse ( data [ 1 ] ) ,
Birthday = DateTime . ParseExact ( data [ 2 ] , "yyyy-MM-dd" , culture ) ,
Address = data [ 3 ] ,
} ;
}
public override List < String > Serialize ( Student data )
{
return new List < String >
{
data . Name ,
data . Height . ToString ( ) ,
data . Birthday . ToString ( "yyyy-MM-dd" ) ,
data . Address ,
} ;
}
}
static void Main ( String [ ] args )
{
var dataResolver = new StudentResolver ( ) ;
var csvPath = "path-to-csv-file" ;
using ( var reader = CsvReader < Student > . Create ( csvPath , dataResolver ) )
{
foreach ( var student in reader )
{
Console . WriteLine ( student . Address ) ;
}
}
}
在早期版本的源代码中,测试项目仅支持Windows操作系统。现在它也支持Linux。
如果要在Linux中运行测试代码(在Ubuntu 18.04 LTS x64上测试),首先将当前目录更改为Sky.Data.Csv.Test ,然后在终端中运行以下命令:
Sky.Data.Csv.Test$ dotnet run -c Release --project Sky.Data.Csv.Test.Core.csproj
这是CsvReader
和CsvWriter
的简单但快速的实现。
此 CsvReader 支持最新版本的 Excel 保存的所有四种格式,即逗号分隔、 ms dos 、 macintosh和逗号分隔 UTF8 。
默认情况下, CsvReaderSettings
和CsvWriterSettings
使用Encoding.Default
作为默认编码,并使用逗号 (,) 作为字段分隔符。您还可以通过创建新的设置对象并将其传递给Create
静态方法来指定这些设置(以及一些其他设置,支持许多设置)。
麻省理工学院许可。