찾다
백엔드 개발C#.Net 튜토리얼CSV 파일에 대한 기술 솔루션을 위한 .NET 라이브러리: CsvHelper 중국어 문서

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

GitHub 주소

읽기

모든 기록 읽기

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

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

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으로 문의하세요.
C# .NET Ecosystem : 프레임 워크, 라이브러리 및 도구C# .NET Ecosystem : 프레임 워크, 라이브러리 및 도구Apr 24, 2025 am 12:02 AM

C#.NET 생태계는 개발자가 응용 프로그램을 효율적으로 구축 할 수 있도록 풍부한 프레임 워크 및 라이브러리를 제공합니다. 1.asp.netCore는 고성능 웹 애플리케이션을 구축하는 데 사용되며 2.entityFrameworkCore는 데이터베이스 작업에 사용됩니다. 이러한 도구의 사용 및 모범 사례를 이해함으로써 개발자는 응용 프로그램의 품질과 성능을 향상시킬 수 있습니다.

C# .NET 애플리케이션 배포 Azure/AWS : 단계별 안내서C# .NET 애플리케이션 배포 Azure/AWS : 단계별 안내서Apr 23, 2025 am 12:06 AM

C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.

C# .net : 강력한 프로그래밍 언어 소개C# .net : 강력한 프로그래밍 언어 소개Apr 22, 2025 am 12:04 AM

C#과 .NET의 조합은 개발자에게 강력한 프로그래밍 환경을 제공합니다. 1) C#은 다형성 및 비동기 프로그래밍을 지원합니다. 2) .net은 크로스 플랫폼 기능과 동시 처리 메커니즘을 제공하여 데스크탑, 웹 및 모바일 애플리케이션 개발에 널리 사용됩니다.

.NET 프레임 워크 대 C#: 용어 디코딩.NET 프레임 워크 대 C#: 용어 디코딩Apr 21, 2025 am 12:05 AM

.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.

Demystifying C# .net : 초보자를위한 개요Demystifying C# .net : 초보자를위한 개요Apr 20, 2025 am 12:11 AM

C#은 Microsoft에서 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET은 Microsoft가 제공하는 개발 프레임 워크입니다. C#은 C의 성능과 Java의 단순성을 결합하며 다양한 응용 프로그램을 구축하는 데 적합합니다. .NET 프레임 워크는 여러 언어를 지원하고 쓰레기 수집 메커니즘을 제공하며 메모리 관리를 단순화합니다.

C# 및 .NET 런타임 : 함께 작동하는 방법C# 및 .NET 런타임 : 함께 작동하는 방법Apr 19, 2025 am 12:04 AM

C# 및 .NET 런타임은 개발자가 효율적이고 강력하며 크로스 플랫폼 개발 기능을 강화하기 위해 긴밀히 협력합니다. 1) C#은 .NET 프레임 워크와 완벽하게 통합하도록 설계된 유형 안전 및 객체 지향 프로그래밍 언어입니다. 2) .NET 런타임은 C# 코드 실행을 관리하고, 쓰레기 수집, 유형 안전 및 기타 서비스를 제공하며, 효율적이고 크로스 플랫폼 운영을 보장합니다.

C# .NET 개발 : 시작에 대한 초보자 안내서C# .NET 개발 : 시작에 대한 초보자 안내서Apr 18, 2025 am 12:17 AM

C# .NET 개발을 시작하려면 다음과 같은 것이 필요합니다. 1. C#의 기본 지식과 .NET 프레임 워크의 핵심 개념을 이해하십시오. 2. 변수, 데이터 유형, 제어 구조, 기능 및 클래스의 기본 개념을 마스터하십시오. 3. LINQ 및 비동기 프로그래밍과 같은 C#의 고급 기능을 배우십시오. 4. 일반적인 오류에 대한 디버깅 기술 및 성능 최적화 방법에 익숙해 지십시오. 이러한 단계를 통해 C#.NET의 세계를 점차적으로 침투하고 효율적인 응용 프로그램을 작성할 수 있습니다.

C# 및 .NET : 둘 사이의 관계 이해C# 및 .NET : 둘 사이의 관계 이해Apr 17, 2025 am 12:07 AM

C#과 .NET의 관계는 분리 할 수 ​​없지만 같은 것은 아닙니다. C#은 프로그래밍 언어이며 .NET은 개발 플랫폼입니다. C#은 코드를 작성하고 .NET의 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행되는 데 사용됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음