Un lector y escritor de CSV simple y extremadamente rápido que admite la lectura y escritura de valores CSV sin procesar y objetos escritos.
Es realmente sencillo de utilizar. A continuación se muestra un ejemplo:
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 ) ;
}
}
}
El método Create
estático tanto de CsvReader
como CsvWriter
puede aceptar un segundo parámetro que especifica algunas opciones como el tamaño del búfer, la codificación, si se sobrescribe o no el archivo existente al escribir un archivo CSV y si se usa o no el caché al leer un archivo CSV, etc. .
La opción UseCache
de la clase CsvReaderSettings
es realmente útil cuando la mayoría de las filas del archivo CSV están duplicadas. Esta opción ayuda mucho a mejorar el rendimiento.
Además, tanto CsvReaderSettings
como CsvWriterSettings
admiten una opción Separator
que le permite especificar el carácter separador de celda al leer o escribir archivos CSV.
Si usa la versión genérica de CsvReader<T>
y CsvWriter<T>
, el método estático Create
también aceptará un parámetro de tipo IDataResolver<T>
que admite CsvReader
y CsvWriter
para leer y escribir objetos escritos.
AbstractDataResolver<T>
proporciona un tipo base con alguna implementación básica y puede crear subclases del mismo.
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 ) ;
}
}
}
En versiones anteriores de los códigos fuente, el proyecto de prueba solo es compatible con el sistema operativo Windows. Ahora también es compatible con Linux.
Si desea ejecutar los códigos de prueba en Linux ( probado en Ubuntu 18.04 LTS x64 ), primero cambie el directorio actual a Sky.Data.Csv.Test y luego ejecute los siguientes comandos en la terminal:
Sky.Data.Csv.Test$ dotnet run -c Release --project Sky.Data.Csv.Test.Core.csproj
Esta es una implementación simple pero rápida de CsvReader
y CsvWriter
.
Este CsvReader admite los cuatro formatos guardados por la versión más reciente de Excel, es decir, separados por comas , ms dos , macintosh y UTF8 separados por comas .
De forma predeterminada, CsvReaderSettings
y CsvWriterSettings
usan Encoding.Default
como codificación predeterminada y coma (,) como separador de campo. También puede especificar estas configuraciones ( y algunas otras configuraciones, se admiten muchas configuraciones ) creando un nuevo objeto de configuración y pasándolo al método Create
estático.
Licencia MIT.