CodeProjectに
という記事があったので、メモメモ。
ついでにちょっとサンプル書いてみました。使いやすいですね。
ライブラリ内の各クラスについては、上記記事内で詳しく記述されています。
使い方も分かりやすく説明されているので、利用する場合は元記事を見ると
すぐ分かりますです。
インストールは、NuGetでいけます。
Install-Package LINQToCSV
以下、サンプル。
予め以下のようなCSVファイルがあるとします。
(Test.csv)
1,name1,33,2013/11/10 2,name2,34,2013/11/11
(WithHeader.csv)
DataId,PersonName,PersonAge,Day 1,name1,1,2013/11/10 0:00:00 20,name20,20,2013/11/30 0:00:00 15,name15,15,2013/11/25 0:00:00
namespace ConsoleApplication1 { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LINQtoCSV; class Program { static void Main() { new Program().Execute(); } public void Execute() { // // LINQ to CSVのサンプル. // 元ネタ: http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library // // LINQ to CSVはNuGetでインストールできる. // Install-Package LINQToCSV // // // ヘッダー無しのCSVファイル読み込み. // // コンテキストを構築. var context = new CsvContext(); // // CSVの情報を示すオブジェクトを構築. // var description = new CsvFileDescription { SeparatorChar = ',', FirstLineHasColumnNames = false, EnforceCsvColumnAttribute = true, TextEncoding = Encoding.UTF8 }; // // 読み取り. // var nameAndBirthDays = from aData in context.Read<CSVData>("Test.csv", description) select new { aData.Name, aData.BirthDay }; foreach (var data in nameAndBirthDays) { Console.WriteLine(data); } // // 書き込み. // var dataList = context.Read<CSVData>("Test.csv", description).ToList(); dataList.Add(new CSVData { Id = 3, Name = "name3", Age = 35, BirthDay = DateTime.Now.AddDays(-100).Date }); context.Write<CSVData>(dataList, "Test2.csv", description); // // 確認. // foreach (var data in context.Read<CSVData>("Test2.csv", description).Select(_ => new { _.Name, _.BirthDay })) { Console.WriteLine(data); } // // ヘッダー付きのCSVファイルを読み込み. // description = new CsvFileDescription { SeparatorChar = ',', FirstLineHasColumnNames = true, TextEncoding = Encoding.UTF8 }; var query = from data in context.Read<WithHeaderCSVData>("WithHeader.csv", description) orderby data.Id select new { data.Name, data.BirthDay }; foreach (var data in query) { Console.WriteLine(data); } } } class CSVData { [CsvColumn(FieldIndex=1)] public int Id { get; set; } [CsvColumn(FieldIndex=4)] public DateTime BirthDay { get; set; } [CsvColumn(FieldIndex=2)] public string Name { get; set; } [CsvColumn(FieldIndex=3)] public int Age { get; set; } } class WithHeaderCSVData { [CsvColumn(Name="DataId", FieldIndex = 1)] public int Id { get; set; } [CsvColumn(Name="Day", FieldIndex = 4)] public DateTime BirthDay { get; set; } [CsvColumn(Name="PersonName", FieldIndex = 2)] public string Name { get; set; } [CsvColumn(Name="PersonAge", FieldIndex = 3)] public int Age { get; set; } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。