Простое и чрезвычайно быстрое средство чтения и записи 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 ) ;
}
}
} Статический метод Create как из CsvReader так и CsvWriter может принимать второй параметр, определяющий некоторые параметры, такие как размер буфера, кодировка, перезаписывать ли существующий файл при записи файла CSV и использовать ли кеш при чтении файла CSV и т. д. .
Параметр UseCache в классе CsvReaderSettings действительно полезен, когда большинство строк в CSV-файле повторяются. Эта опция очень помогает улучшить производительность.
Кроме того, как 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 .
Лицензия MIT.