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...
}