C#でのCSVファイルの読み込み方と、出力方法についてまとめます。
【検証環境】.NET Framework 4.7.2
CSVファイルを読み込む
※上記の様なCSVファイルを読み込み、Listに格納する場合
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Tel { get; set; }
public string Address { get; set; }
public string Mail { get; set; }
}
IEnumerable<Person> GetListByCSV(string filePath = @"D:testRead.csv")
{
var people = new List<Person>();
//1行ずつ配列に格納
var lines = File.ReadAllLines(filePath);
//読み込んだ行数分ループ
foreach (var line in lines)
{
//項目をカンマ区切りごとに配列に格納
var items = line.Split(',');
//Personオブジェクトの生成
var person = new Person()
{
Name = items[0],
Age = int.Parse(items),
Tel = items,
Address = items,
Mail = items,
};
people.Add(person);
}
return people;
}
CSVファイルを出力する
※読み込むのとは逆に、ListからCSVファイルを出力する場合
void CreateCSV(IEnumerable<Person> people, string filePath = @"D:testCreate.csv")
{
var sb = new StringBuilder();
foreach (var person in people)
{
var row = $"{person.Name},{person.Age},{person.Tel},{person.Address},{person.Mail}";
sb.AppendLine(row);
}
StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8);
file.Write(sb.ToString());
file.Close();
}
//もしくは
void CreateCSV_Ex(IEnumerable<Person> people, string filePath = @"D:testCreate.csv")
{
var sb = new StringBuilder();
foreach (var person in people)
{
var wksb = new StringBuilder();
var newLine = true;
foreach (var prop in person.GetType().GetProperties())
{
wksb.Append((newLine ? "" : ",") + prop.GetValue(person).ToString());
if (newLine) newLine = false;
}
sb.AppendLine(wksb.ToString());
newLine = true;
}
StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8);
file.Write(sb.ToString());
file.Close();
}
拡張ライブラリ
CsvHelper というライブラリを使用することで手軽にCSVファイルの読み書きを行うことが可能です。
使い方はこちらの記事を参照して下さい。