うぃろぅです。
昨日の記事関連。
多分別の場所で使う機会はないというかCsvHelper
を使えばいいじゃないかっていう気がしますが、記録として残しておきます。
目的
CSVファイルを読み込んでDataTable型として返却する
そもそもDBで用意していてほしい。
TextFieldParser
を使えば簡単にできそうなのでそれを使う。
以下サンプル。
using Microsoft.VisualBasic.FileIO; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Xml.Linq; using static MergeCsv.Constants; public static DataTable LoadCsvToDataTable(string path) { var parser = new TextFieldParser(path, Encoding.GetEncoding("Shift-JIS")) { TextFieldType = FieldType.Delimited, Delimiters = new string[] { "," } } // 全行読み込み var rows = new List<string[]>(); while(!parser.EndOfData) { rows.add(parser.ReadFields()); } // 列設定 var table = new DataTable(); table.Columns.AddRange(rows.First().Select(s => new DataColumn(s)).ToArray()); // 行追加 foreach(var row in rows.Skip(1)) { table.Rows.Add(row); } return table; }
列名に同名のものがない想定。同名の列があった場合はDistinct().Select(~)
という感じでいける。
そもそも同名の列がある時点でDBとしてはバグ?私もそう思います。でも実際にあったんだもの。なぜ。
簡単だけど以上。これぞlogって感じがしてきていいのでは?
ではまた。