利用準備
パッケージのインストール
PM> Install-Package CsvHelper
https://joshclose.github.io/CsvHelper/getting-started/
CSVファイルの作成
下記のような中身のCSVファイルを例にします
Id,Name,Age
1,永野芽衣,21
2,本田翼,28
3,戸田恵梨香,32
データ格納用クラスの作成
Index 属性を定義することで、CSVファイルの何列目かを指定できます。
また、Name 属性にCSVヘッダ名を定義することで、CSVのヘッダ名とプロパティ名を一致させる必要が無くなります。
今回はIndex 属性を使用します。
public class Person
{
[Index(0)]
public int Id { get; set; }
[Index(1)]
public string Name { get; set; }
[Index(2)]
public int Age { get; set; }
}
使い方
https://joshclose.github.io/CsvHelper/
CSVを読み取る
var filePath = @"C:testperson_read.csv";
using (var reader = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
using (var csv = new CsvReader(reader, new CultureInfo("ja-JP", false))
{
//IEnumerable<Person>で返す
var records = csv.GetRecords<Person>();
}
}
CSVにヘッダがない場合は下記のようにコードで明示する必要があります。
var filePath = @"C:testperson_read.csv";
using (var reader = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
var config = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("ja-JP", false))
{
//ヘッダ無(デフォルトtrue)
HasHeaderRecord = false,
};
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<Person>();
}
}
CSVに書き出す
パスが存在しなくてもCSVファイルは生成されます。
逆にファイルが存在する場合は、上書きされます。
var filePath = @"C:testperson_write.csv";
using (var writer = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
using (var csv = new CsvWriter(writer, new CultureInfo("ja-JP", false))
{
var people = new List<Person>()
{
new Person(){Id=4,Name="川口春奈",Age=26 },
new Person(){Id=5,Name="新垣結衣",Age=33 },
new Person(){Id=6,Name="吉岡里帆",Age=28 },
};
csv.WriteRecords(people);
}
}
var filePath = @"C:testperson_write.csv";
using (var writer = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
var config = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("ja-JP", false))
{
//ヘッダ無(デフォルトtrue)
HasHeaderRecord = false,
};
using (var csv = new CsvWriter(writer, config)
{
var people = new List<Person>()
{
new Person(){Id=4,Name="川口春奈",Age=26 },
new Person(){Id=5,Name="新垣結衣",Age=33 },
new Person(){Id=6,Name="吉岡里帆",Age=28 },
};
csv.WriteRecords(people);
}
}