CsvHelperとは
CSVファイルの読み書きができます。
取り込むデータの型指定やインデックス付与をすることができるためデータとして扱いやすくなります。
入手方法
名称 | バージョン |
---|---|
入手場所 | Nuget |
ライセンス | MS-PL Or Apache-2.0 license |
実装例
D:\test.csvのCSVを読み込みコンソールに表示していく実装例になります。
事前作業
Nugetからダウンロードしてプロジェクトにインポートする。
環境
名称 | バージョン |
---|---|
フレームワーク | WPF |
.NetFramework | v4.7.2 |
CsvHelper | v30.0.1 |
実装例
using System;
using System.Windows;
using System.IO;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
namespace WpfApp
{
public partial class MainWindow : System.Windows.Window
{
public MainWindow()
{
try
{
List<csvData> list = new List<csvData>();
list.AddRange(GetCSVRecords(D:\\test.csv));
foreach(row in list)
{
Console.WriteLine("日付{0} データ:{1} データ:{2} データ:{3}",row.DATE, row.Data1, row.Data2, row.Data3);
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private List<csvData> GetCSVRecords(string file)
{
try{
// .NET 6 の場合でShift-jisをエンコードする場合は下記の処理が必要
//Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//ヘッダあり
var config = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("ja-JP", false))
{
HasHeaderRecord = true
};
using (StreamReader reader = new StreamReader(file, Encoding.GetEncoding("shift-jis")))
{
using (CsvReader csvReader = new CsvReader(reader, config))
{
// Formatなど詳細を設定する場合はMapクラスを使う
//csvReader.Context.RegisterClassMap<DataClassMap>();
var rows = csvReader.GetRecords<csvData>();
return rows.ToList();
}
}
}
catch
{
throw;
}
}
}
public class csvData
{
[Index(0)]
public DateTime DATE { get; set; }
[Index(1)]
public double? Data1 { get; set; }
[Index(2)]
public double? Data2 { get; set; }
[Index(3)]
public string Data3 { get; set; }
[Index(4)]
}
}
最後に
StreamReaderだけだとデータのマッピングが面倒くさく、カラムが大量にあるときに苦戦します。CSVを読み込むときはなるべく利用した方が楽になるパターンが多いです。