var generatedMap = csv.Configuration.AutoMap<MyClass>();
CSV ファイルに対する技術ソリューション用の .NET ライブラリ: CsvHelper 中国語ドキュメント
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'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>(); } }
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" ); // 内容转换 } }
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.
} );
}
}
ログイン後にコピー
実行時マッピングマッピングは実行時に作成できます。 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);
// Default value
csv.Configuration.AllowComments = false;
ログイン後にコピー
自動マッピング// Default value csv.Configuration.AllowComments = false;
var generatedMap = csv.Configuration.AutoMap<MyClass>();
ログイン後にコピー
キャッシュ TextReader または TextWriter での読み取りと書き込みのキャッシュvar generatedMap = csv.Configuration.AutoMap<MyClass>();
// Default value csv.Configuration.BufferSize = 2048;
// Default value csv.Configuration.Comment = '#';
// Default value csv.Configuration.CountBytes = false;
// Default value
csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
ログイン後にコピー
Separator// Default value csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;
// Default value
csv.Configuration.Delimiter = ",";
ログイン後にコピー
列番号変更オンにすると、列番号が変更された場合にCsvBadDataExceptionがスローされます// Default value csv.Configuration.Delimiter = ",";
// Default value csv.Configuration.DetectColumnCountChanges = false;
// Default value
csv.Configuration.Encoding = Encoding.UTF8;
ログイン後にコピー
ヘッダー レコードの有無// Default value csv.Configuration.Encoding = Encoding.UTF8;
// Default value
csv.Configuration.HasHeaderRecord = true;
ログイン後にコピー
列名のスペースを無視する列名のスペースを無視するかどうか// 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;
ログイン後にコピー
マップ アクセスカスタム クラス マッピングにアクセスできます// Default value csv.Configuration.IsHeaderCaseSensitive = true;
var myMap = csv.Configuration.Maps[typeof( MyClass )];
// Default value csv.Configuration.PropertyBindingFlags = BindingFlags.Public | BindingFlags.Instance;
// Default value csv.Configuration.Quote = '"';
// 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.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;
ログイン後にコピー
クラス マッピングのバインド解除// Default value csv.Configuration.TrimHeaders = false;
// Unregister single map.
csv.Configuration.UnregisterClassMap<MyClassMap>();
// Unregister all class maps.
csv.Configuration.UnregisterClassMap();
ログイン後にコピー
空のフィールドが例外をスローするかどうか// Unregister single map. csv.Configuration.UnregisterClassMap<MyClassMap>(); // Unregister all class maps. csv.Configuration.UnregisterClassMap();
// Default value
csv.Configuration.WillThrowOnMissingField = true;
ログイン後にコピー
型変換型変換は、CsvHelper が文字列を .NET 型に (またはその逆に) 変換する方法です。 その他例外情報の表示// Default value csv.Configuration.WillThrowOnMissingField = true;
Exception.Data["CsvHelper"]
// Row: '3' (1 based)
// Type: 'CsvHelper.Tests.CsvReaderTests+TestBoolean'
// Field Index: '0' (0 based)
// Field Name: 'BoolColumn'
// Field Value: 'two'
ログイン後にコピー
DataReader および DataTableDataReader オブジェクトが CSV に書き込まれますException.Data["CsvHelper"] // Row: '3' (1 based) // Type: 'CsvHelper.Tests.CsvReaderTests+TestBoolean' // Field Index: '0' (0 based) // Field Name: 'BoolColumn' // Field Value: 'two'
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(); }
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(); } }
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 ); }
jQuery EasyUI API 中国語ドキュメント - Documentation Documentation_jquery
関連ビデオ:以上がCSV ファイルに対する技術ソリューション用の .NET ライブラリ: CsvHelper 中国語ドキュメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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