うぃろぅ.log

140字で綴りきれない日々の徒然備忘録

【C#】 CSVをDataTableとして読み込む

うぃろぅです。

vviilloovv.hatenablog.com

昨日の記事関連。
多分別の場所で使う機会はないというか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って感じがしてきていいのでは?

ではまた。