目次
Read
すべてのレコードを読む
レコードを手動で読み取る
個別にフィールドを読み取ります
parse
Write
すべてのレコードを書き込み
マッピング
自動マッピング
手動マッピング
参照マッピング
添字指定
列名の指定
同名処理
デフォルト値
型変換
var generatedMap = csv.Configuration.AutoMap<MyClass>();
ログイン後にコピー
" >
var generatedMap = csv.Configuration.AutoMap<MyClass>();
ログイン後にコピー
ホームページ バックエンド開発 C#.Net チュートリアル CSV ファイルに対する技術ソリューション用の .NET ライブラリ: CsvHelper 中国語ドキュメント

CSV ファイルに対する技術ソリューション用の .NET ライブラリ: CsvHelper 中国語ドキュメント

Jul 27, 2018 am 11:32 AM
c# csv

CsvHelper は、CSV ファイルの読み取りと書き込みのための .NET ライブラリです。 CsvHelper は、Visual Studio のパッケージ マネージャーを通じてダウンロードできます。自動マッピング定義: マッピング ファイルが指定されていない場合、デフォルトは自動マッピングであり、自動マッピングはクラスの属性に順番にマッピングされます。

GitHub アドレス

Read

すべてのレコードを読む

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();
}
ログイン後にコピー

マッピング

自動マッピング

マッピング ファイルが提供されていない場合、デフォルトの自動マッピングマッピングを行うと、自動マッピングがクラスの属性に順番にマッピングされます。属性がカスタム クラスの場合、このカスタム クラスの属性に従って引き続き入力されます。循環参照が発生すると、自動マッピングが停止します。

手動マッピング

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>();
    }
}
ログイン後にコピー
#が記録されます。 ##can オプションの型変換

デフォルトのコンバーターはほとんどの型変換を処理しますが、場合によっては小さな変更を加える必要がある場合があります。この時点では、オプションの型変換を使用してみることができます。

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.
        } );
    }
}
ログイン後にコピー

実行時マッピング

マッピングは実行時に作成できます。

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);
ログイン後にコピー

この記事はtangyikejunによって翻訳されました
構成

コメントを許可

// Default value
csv.Configuration.AllowComments = false;
ログイン後にコピー

自動マッピング

var generatedMap = csv.Configuration.AutoMap<MyClass>();
ログイン後にコピー

キャッシュ

TextReader または TextWriter での読み取りと書き込みのキャッシュ

// Default value
csv.Configuration.BufferSize = 2048;
ログイン後にコピー

Comment

コメントアウトされた行は読み込まれません

// Default value
csv.Configuration.Comment = &#39;#&#39;;
ログイン後にコピー

バイト数

現在の読み取り 何バイトが取得されましたか? CSV ファイルと一貫性を持たせるために、Configuration.Encoding を設定する必要があります。この設定は解析速度に影響します。

// Default value
csv.Configuration.CountBytes = false;
ログイン後にコピー

カルチャ情報

// Default value
csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
ログイン後にコピー

Separator

// Default value
csv.Configuration.Delimiter = ",";
ログイン後にコピー

列番号変更

オンにすると、列番号が変更された場合にCsvBadDataExceptionがスローされます

// 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 )];
ログイン後にコピー

属性バインディング タグ

カスタム クラスの属性の検索に使用されます

// Default value
csv.Configuration.PropertyBindingFlags = BindingFlags.Public | BindingFlags.Instance;
ログイン後にコピー

この記事は、tang yi ke junによって翻訳されました
Quote

区切り文字、括弧、または行末をエスケープするために使用するエスケープ文字を定義します。

// Default value
csv.Configuration.Quote = &#39;"&#39;;
ログイン後にコピー

すべてのフィールドの引用符

CSV に書き込むときにすべてのフィールドを引用符で囲むかどうか。 QuoteAllFields と QuoteNoFields を同時に true にすることはできません。

// Default value
csv.Configuration.QuoteAllFields = false;
ログイン後にコピー

すべてのフィールドは引用符で囲まれていません

QuoteAllFields と QuoteNoFields を同時に true にすることはできません。

// 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;
ログイン後にコピー

列名のトリミング

// Default value
csv.Configuration.TrimHeaders = false;
ログイン後にコピー

クラス マッピングのバインド解除

// Unregister single map.
csv.Configuration.UnregisterClassMap<MyClassMap>();
// Unregister all class maps.
csv.Configuration.UnregisterClassMap();
ログイン後にコピー

空のフィールドが例外をスローするかどうか

// Default value
csv.Configuration.WillThrowOnMissingField = true;
ログイン後にコピー

型変換

型変換は、CsvHelper が文字列を .NET 型に (またはその逆に) 変換する方法です。

その他

例外情報の表示

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;
ログイン後にコピー

DataReader および DataTable

DataReader オブジェクトが 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();
}
ログイン後にコピー

DataTable オブジェクトが書き込まれますCSV

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();
    }
}
ログイン後にコピー

CSV to DataTable

while( csv.Read() )
{
    var row = dt.NewRow();
    foreach( DataColumn column in dt.Columns )
    {
        row[column.ColumnName] = csv.GetField( column.DataType, column.ColumnName );
    }
    dt.Rows.Add( row );
}
ログイン後にコピー
関連記事:


.net CsvHelper 2.0

jQuery EasyUI API 中国語ドキュメント - Documentation Documentation_jquery

関連ビデオ:

Ruby 中国語ドキュメント

以上がCSV ファイルに対する技術ソリューション用の .NET ライブラリ: CsvHelper 中国語ドキュメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

See all articles