一個簡單且極其快速的 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
靜態方法來指定這些設定(以及一些其他設置,支援許多設定)。
麻省理工學院許可。