>  기사  >  백엔드 개발  >  CSV 파일에 대한 기술 솔루션을 위한 .NET 라이브러리: CsvHelper 중국어 문서

CSV 파일에 대한 기술 솔루션을 위한 .NET 라이브러리: CsvHelper 중국어 문서

php是最好的语言
php是最好的语言원래의
2018-07-27 11:32:275577검색

CsvHelper는 CSV 파일을 읽고 쓰기 위한 .NET 라이브러리입니다. CsvHelper는 Visual Studio의 패키지 관리자를 통해 다운로드할 수 있습니다. 자동 매핑 정의: 매핑 파일이 제공되지 않으면 기본값은 자동 매핑이며, 이는 클래스의 속성에 순차적으로 매핑됩니다.

GitHub 주소

읽기

모든 기록 읽기

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>(); // 把 CSV 记录映射到 MyClass,返回的 records 是个 IEnumerable<T> 对象

매핑 관계를 맞춤설정하려면 아래 매핑 섹션을 참조하세요.
레코드는 IEnumerable8742468051c85b06f0a0af9e3e506b5c 개체이므로 액세스할 때만 레코드가 반환되고, 액세스한 후에는 레코드가 반환됩니다. 목록처럼 액세스하려면 다음을 수행하면 됩니다.

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>().ToList();

수동으로 레코드 읽기

행 루프에서 각 행의 데이터를 읽을 수 있습니다

var csv = new CsvReader( textReader );
while( csv.Read() )
{
    var record = csv.GetRecord<MyClass>();
}

개별 필드 읽기

var csv = new CsvReader( textReader );
while( csv.Read() )
{
    var intField = csv.GetField<int>( 0 );
    var stringField = csv.GetField<string>( 1 );
    var boolField = csv.GetField<bool>( "HeaderName" );
}

읽기 유형이 다음과 같은 경우 예상과 다를 수 있으므로 TryGetField

var csv = new CsvReader( textReader );
while( csv.Read() )
{
    int intField;
    if( !csv.TryGetField( 0, out intField ) )
    {
        // Do something when it can&#39;t convert.
    }
}

parse

를 사용할 수 있습니다. 각 줄을 문자열로 반환하려면 CsvParser를 사용할 수 있습니다.

var parser = new CsvParser( textReader );
while( true )
{
    var row = parser.Read(); // row 是个字符串
    if( row == null )
    {
        break;
    }
}

Write

모든 레코드 쓰기

var csv = new CsvWriter( textWriter );
csv.WriteRecords( records );
var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
    csv.WriteRecord( item );
}
var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
    csv.WriteField( "a" );
    csv.WriteField( 2 );
    csv.WriteField( true );
    csv.NextRecord();
}

Mapping

자동 매핑

매핑 파일이 제공되지 않을 경우 기본값은 자동 매핑이며 자동 매핑은 클래스의 속성에 순서대로 매핑됩니다. 속성이 사용자 정의 클래스인 경우 이 사용자 정의 클래스의 속성에 따라 계속 채워집니다. 순환 참조가 발생하면 자동 매핑이 중지됩니다.

수동 매핑

CSV 파일과 사용자 정의 클래스가 정확히 일치하지 않는 경우 일치하는 클래스를 정의하여 처리할 수 있습니다.

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id );
        Map( m = > m.Name );
    }
}
이 글은 tangyikejun이 번역했습니다.

참조 매핑

속성이 CSV 파일의 여러 열에 해당하는 사용자 정의 클래스인 경우 참조 매핑을 사용할 수 있습니다.

public sealed class PersonMap : CsvClassMap<Person>
{
    public PersonMap()
    {
        Map( m => m.Id );
        Map( m => m.Name );
        References<AddressMap>( m => m.Address );
    }
}

public sealed class AddressMap : CsvClassMap<Address>
{
    public AddressMap()
    {
        Map( m => m.Street );
        Map( m => m.City );
        Map( m => m.State );
        Map( m => m.Zip );
    }
}

하위 첨자 지정

열 첨자로 매핑을 지정할 수 있습니다

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Index( 0 );
        Map( m => m.Name ).Index( 1 );
    }
}

열 이름 지정

열 이름으로 매핑을 지정할 수도 있습니다. 이를 위해서는 csv 파일에 헤더 레코드가 있어야 합니다. 즉, 첫 번째 줄에 열 이름

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Name( "The Id Column" );
        Map( m => m.Name ).Name( "The Name Column" );
    }
}

동일 이름 처리

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.FirstName ).Name( "Name" ).NameIndex( 0 );
        Map( m => m.LastName ).Name( "Name" ).NameIndex( 1 );
    }
}

기본값

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public override void MyClassMap()
    {
        Map( m => m.Id ).Index( 0 ).Default( -1 );
        Map( m => m.Name ).Index( 1 ).Default( "Unknown" );
    }
}

유형 변환

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Id ).Index( 0 ).TypeConverter<MyIdConverter>();
    }
}

선택적 유형 변환

기본 변환기가 대부분의 유형 변환을 처리하지만 때로는 약간의 변경이 필요할 수도 있습니다. 선택적 유형 변환을 사용해 볼 수 있습니다.

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map( m => m.Description ).Index( 0 ).TypeConverterOption( CultureInfo.InvariantCulture ); // 
        Map( m => m.TimeStamp ).Index( 1 ).TypeConverterOption( DateTimeStyles.AdjustToUniversal ); // 时间格式转换
        Map( m => m.Cost ).Index( 2 ).TypeConverterOption( NumberStyles.Currency ); // 数值类型转换
        Map( m => m.CurrencyFormat ).Index( 3 ).TypeConverterOption( "C" );
        Map( m => m.BooleanValue ).Index( 4 ).TypeConverterOption( true, "sure" ).TypeConverterOption( false, "nope" ); // 内容转换
    }
}

ConvertUsing

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        // 常数
        Map( m => m.Constant ).ConvertUsing( row => 3 );
        // 把两列聚合在一起
        Map( m => m.Aggregate ).ConvertUsing( row => row.GetField<int>( 0 ) + row.GetField<int>( 1 ) );
        // Collection with a single value.
        Map( m => m.Names ).ConvertUsing( row => new List<string>{ row.GetField<string>( "Name" ) } );
        // Just about anything.
        Map( m => m.Anything ).ConvertUsing( row =>
        {
            // You can do anything you want in a block.
            // Just make sure to return the same type as the property.
        } );
    }
}

런타임 매핑

매핑은 런타임에 생성될 수 있습니다.

R
var customerMap = new DefaultCsvClassMap();

// mapping holds the Property - csv column mapping 
foreach( string key in mapping.Keys )
{
    var columnName = mapping[key].ToString();

    if( !String.IsNullOrEmpty( columnName ) )
    {
        var propertyInfo = typeof( Customer ).GetType().GetProperty( key );
        var newMap = new CsvPropertyMap( propertyInfo );
        newMap.Name( columnName );
        customerMap.PropertyMaps.Add( newMap );
    }
}

csv.Configuration.RegisterClassMap(CustomerMap);
re이 기사는 TEXTYIKEJUNFIGURATION 님에 의해 번역되었습니다. 텍스트 스트레더 또는 TextWriter의 읽기 및 쓰기에 대한 해상 매핑
// Default value
csv.Configuration.AllowComments = false;
맵핑
r
var generatedMap = csv.Configuration.AutoMap<MyClass>();

cache achecache 님이 주석을 달리지 않을 것입니다.

// Default value
csv.Configuration.BufferSize = 2048;

Byte count

현재 읽은 바이트 수를 기록합니다. Configuration.Encoding은 CSV 파일과 일치하도록 설정되어야 합니다. 이 설정은 구문 분석 속도에 영향을 미칩니다.

// Default value
csv.Configuration.Comment = &#39;#&#39;;

문화 정보

// Default value
csv.Configuration.CountBytes = false;

Separator

// Default value
csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;

열 번호 변경

활성화하면 열 번호가 변경되면 CsvBadDataException이 발생합니다.

// Default value
csv.Configuration.Delimiter = ",";

Encoding

// Default value
csv.Configuration.DetectColumnCountChanges = false;

헤더 레코드가 있는지 여부

// Default value
csv.Configuration.Encoding = Encoding.UTF8;

열 이름 무시 공백

예 열 이름의 공백 무시

// Default value
csv.Configuration.HasHeaderRecord = true;

비공개 액세스 무시

읽고 쓸 때 비공개 접근자를 무시할지 여부

// Default value
csv.Configuration.IgnoreHeaderWhiteSpace = false;

읽기 예외 무시

읽는 동안 예외가 발생한 후에도 계속 읽기

// Default value
csv.Configuration.IgnorePrivateAccessor = false;

따옴표 무시

따옴표는 이스케이프 문자 역할을 하지 않습니다

// Default value
csv.Configuration.IgnoreReadingExceptions = false;

열 이름이 대소문자를 구분하는지 여부

// Default value
csv.Configuration.IgnoreQuotes = false;

매핑된 액세스

사용자 정의 클래스 매핑에 액세스할 수 있습니다

// Default value
csv.Configuration.IsHeaderCaseSensitive = true;

속성 바인딩 태그

사용자 정의 클래스의 속성을 찾는 데 사용됩니다

var myMap = csv.Configuration.Maps[typeof( MyClass )];

이 문서는 번역되었습니다 by tang yi ke jun

Quote

구분자, 대괄호 또는 줄 끝을 이스케이프하는 데 사용되는 이스케이프 문자를 정의하세요

// Default value
csv.Configuration.PropertyBindingFlags = BindingFlags.Public | BindingFlags.Instance;

모든 필드가 인용됩니다

csv에 쓸 때 모든 필드에 따옴표를 추가할지 여부입니다. QuoteAllFields와 QuoteNoFields는 동시에 true일 수 없습니다.

// Default value
csv.Configuration.Quote = &#39;"&#39;;

따옴표가 없는 모든 필드

QuoteAllFields와 QuoteNoFields는 동시에 true일 수 없습니다.
// Default value
csv.Configuration.QuoteAllFields = false;

예외 콜백 읽기

// Default value
csv.Configuration.QuoteNoFields = false;

클래스 매핑 등록

클래스 매핑을 사용하는 경우 등록을 해야 실제로 사용할 수 있습니다.

csv.Configuration.ReadingExceptionCallback = ( ex, row ) =>
{
    // Log the exception and current row information.
};

빈 기록 건너뛰기

모든 필드가 비어 있으면 빈 필드로 간주됩니다.

csv.Configuration.RegisterClassMap<MyClassMap>();
csv.Configuration.RegisterClassMap<AnotherClassMap>();

필드 자르기

필드 내용 끝의 공백 문자를 제거하세요.

// Default value
csv.Configuration.SkipEmptyRecords = false;

트림 열 이름

// Default value
csv.Configuration.TrimFields = false;

Unbind 클래스 맵

// Default value
csv.Configuration.TrimHeaders = false;

빈 필드에서 예외가 발생하는지 여부

// Unregister single map.
csv.Configuration.UnregisterClassMap<MyClassMap>();
// Unregister all class maps.
csv.Configuration.UnregisterClassMap();

유형 변환

유형 변환은 CsvHelper가 문자열을 .NET 유형으로(또는 그 반대로) 변환하는 방법입니다.

기타

예외 정보 보기

// Default value
csv.Configuration.WillThrowOnMissingField = true;

DataReader 및 DataTable

DataReader 개체는 CSV

Exception.Data["CsvHelper"]

// Row: &#39;3&#39; (1 based)
// Type: &#39;CsvHelper.Tests.CsvReaderTests+TestBoolean&#39;
// Field Index: &#39;0&#39; (0 based)
// Field Name: &#39;BoolColumn&#39;
// Field Value: &#39;two&#39;

DataTable 개체는 CSV

var hasHeaderBeenWritten = false;
while( dataReader.Read() )
{
    if( !hasHeaderBeenWritten )
    {
        for( var i = 0; i < dataReader.FieldCount; i++ )
        {
            csv.WriteField( dataReader.GetName( i ) );
        }
        csv.NextRecord();
        hasHeaderBeenWritten = true;
    }

    for( var i = 0; i < dataReader.FieldCount; i++ )
    {
        csv.WriteField( dataReader[i] );
    }
    csv.NextRecord();
}

CSV에 DataTable

using( var dt = new DataTable() )
{
    dt.Load( dataReader );
    foreach( DataColumn column in dt.Columns )
    {
        csv.WriteField( column.ColumnName );
    }
    csv.NextRecord();

    foreach( DataRow row in dt.Rows )
    {
        for( var i = 0; i < dt.Columns.Count; i++ )
        {
            csv.WriteField( row[i] );
        }
        csv.NextRecord();
    }
}

에 기록됩니다. 관련 기사:

. 넷 CsvHelper 2.0

jQuery EasyUI API 중국어 문서 - Documentation Documentation_jquery

관련 동영상:


Ruby 중국어 문서

위 내용은 CSV 파일에 대한 기술 솔루션을 위한 .NET 라이브러리: CsvHelper 중국어 문서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.