Um leitor e gravador CSV simples e extremamente rápido que suporta leitura e gravação de valores CSV brutos e objetos digitados.
É muito simples de usar. A seguir está um exemplo:
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 ) ;
}
}
}
O método estático Create
de CsvReader
e CsvWriter
pode aceitar um segundo parâmetro especificando algumas opções como tamanho do buffer, codificação, substituir ou não o arquivo existente ao gravar um arquivo CSV e usar ou não cache ao ler um arquivo CSV, etc. .
A opção UseCache
na classe CsvReaderSettings
é realmente útil quando a maioria das linhas no arquivo CSV estão duplicadas. Esta opção ajuda muito a melhorar o desempenho.
Além disso, CsvReaderSettings
e CsvWriterSettings
suportam uma opção Separator
que permite especificar o caractere separador de células ao ler ou gravar arquivos CSV.
Se você usar a versão genérica de CsvReader<T>
e CsvWriter<T>
, o método estático Create
também aceitará um parâmetro do tipo IDataResolver<T>
que suporta CsvReader
e CsvWriter
para ler e gravar objetos digitados.
O AbstractDataResolver<T>
fornece um tipo base com alguma implementação básica e você pode criar subclasses dele.
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 ) ;
}
}
}
Nas versões anteriores dos códigos-fonte, o projeto de teste oferece suporte apenas ao sistema operacional Windows. Agora também suporta Linux.
Se você deseja executar os códigos de teste no Linux ( testados no Ubuntu 18.04 LTS x64 ), primeiro altere o diretório atual para Sky.Data.Csv.Test e depois execute os seguintes comandos no terminal:
Sky.Data.Csv.Test$ dotnet run -c Release --project Sky.Data.Csv.Test.Core.csproj
Esta é uma implementação simples, mas rápida, de CsvReader
e CsvWriter
.
Este CsvReader suporta todos os quatro formatos salvos pela versão mais recente do Excel, que é separado por vírgula , ms dos , macintosh e UTF8 separado por vírgula .
Por padrão, CsvReaderSettings
e CsvWriterSettings
usam Encoding.Default
como codificação padrão e vírgula (,) como separador de campo. Você também pode especificar essas configurações ( e algumas outras configurações, muitas configurações são suportadas ) criando um novo objeto de configuração e passando-o para o método estático Create
.
Licenciado pelo MIT.