C# マッピングクラスを csvhelper に作成する方法 質問する

C# マッピングクラスを csvhelper に作成する方法 質問する

40 列の csv ファイルがあり、csvhelper を使用してそれをデータテーブルにロードしたいと考えています。ライブラリをインストールした後、次の操作を実行しました。

using (TextReader reader = File.OpenText(fileName)) {
   var csv = new CsvReader(reader);
   while (csv.Read()) {
       var farmID = csv.GetField(0);
       Console.WriteLine(farmID);
   }
}

ご覧のとおり、コンソール ステートメントがあり、完璧に動作します。

ただし、csvReader には、カスタム クラスを取得してデータを直接読み込むコンストラクターがあります。

私はこれを試しました:

var record = csv.GetRecord<CSVFileDefinition>();

しかし、私はこの例外を得ました

No properties are mapped for type 'MyProjectName.CSVFileDefinition'.

CSVFileDefinition は空のクラスであるためです。

私の質問は、そのクラスをどうやって埋めるかということです。

これはライブラリです:

http://joshclose.github.io/CsvHelper/

どうもありがとう

アップデート2

sealed class CSVFileDefinitionMap : CsvClassMap<CSVFileDefinition>
{
   public CSVFileDefinitionMap()
   {
      Map(m => m.FRM_ID).Name("FARM ID");
      Map(m => m.FRM_OWNER).Name("FARM OWNER ");
   }
}

class CSVFileDefinition
{
    public string FRM_ID { get; set; }
    public string FRM_OWNER { get; set; }
}

using (TextReader reader = File.OpenText(fileName)) {
    var csv = new CsvReader(reader);
    csv.Context.RegisterClassMap<CSVFileDefinitionMap>();
    while (csv.Read()) {
       var record = csv.GetRecord<CSVFileDefinition>();
    }
}

ベストアンサー1

必要なのは、CSV ファイル内に存在すると予想される列名ごとに CSVFileDefinition クラスにプロパティを追加することだけであり、残りは自動マッピングによって処理されるはずです。

たとえば、プロパティ名が CSV 内の列名と一致する場合、ファーム ID 列が取得されます。

public class CSVFileDefinition
{
    public int FarmId { get; set; }

    //... add other columns here...
}

おすすめ記事