自分用めも。
CSVって囲い文字ありなしでカンマ読み分けたりするの大変よね。
というわけでこの辺りは数多の既に存在しているライブラリを使っていきます。
具体的にはCSVHelperを。nugetで検索したら一番上に出てきたし、なんか日本語の情報もたくさん出てきて安心。1回nugetパッケージ比較とかしてみたいなぁ。
やりたいこと
・nugetパッケージCSVHelperを使用したCSVファイルの読み書き
・使用したCSVHelperのバージョンはv24.0.0
・ヘッダなし10項目CSVファイルを準備。これを読んでそのまま出力する
とりあえずファイル読み書きできるコード
using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
var records = new List<Csv>();
var config = new CsvConfiguration(new CultureInfo("ja-JP", false))
{
HasHeaderRecord = false
};
//read
using (var reader = new StreamReader(@"C:\jikken\jikken.csv",
Encoding.GetEncoding("utf-8")))
using (var csv = new CsvReader(reader, config))
{
csv.Context.RegisterClassMap<CsvMap>();
records = csv.GetRecords<Csv>().ToList();
}
//write
using (var writer = new StreamWriter(@"C:\jikken\jikken_out.csv",false,
Encoding.GetEncoding("utf-8")))
using (var csv = new CsvWriter(writer, config))
{
csv.WriteRecords(records);
}
Console.WriteLine("CsvHelper");
}
public class Csv
{
public string Name0 { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
public string Name3 { get; set; }
public string Name4 { get; set; }
public string Name5 { get; set; }
public string Name6 { get; set; }
public string Name7 { get; set; }
public string Name8 { get; set; }
public string Name9 { get; set; }
}
public sealed class CsvMap : ClassMap<Csv>
{
public CsvMap()
{
Map(m => m.Name0).Index(0);
Map(m => m.Name1).Index(1);
Map(m => m.Name2).Index(2);
Map(m => m.Name3).Index(3);
Map(m => m.Name4).Index(4);
Map(m => m.Name5).Index(5);
Map(m => m.Name6).Index(6);
Map(m => m.Name7).Index(7);
Map(m => m.Name8).Index(8);
Map(m => m.Name9).Index(9);
}
}
}
}
その他
CSVHelperの入出力形式を編集したい場合は下記の記事をどうぞ。
18行目のCsvConfigurationの中を編集することで改行コードを変えたり、区切り文字を変更することも可能です。