C#メモ CSV形式のテキストファイルの内容をDataTableに直接格納してみる

C#

これまた野暮用。
CSV形式のテキストファイルの内容をサクッとDataTableに格納できんもんかと調べてたら、案外簡単にできそうなのでメモっとくことに。

定義するnamespaceはこんな感じ。

using System;
using System.IO;
using System.Data;
using System.Data.OleDb;

試しに読み込むCSV形式のテキストファイルの内容はこんな感じ。
テキストファイルの1行目は見出しになる。
今回ファイルの名前はsample.csv、ファイルを置いとく場所はCドライブ直下(C:¥)としとく。

key,value
apple,1
orange,3

処理の順番はこんな感じ。

  1. データベースに接続する(今回はCSVファイルを開くってことになる)
  2. クエリ文字列を作る
  3. CSVファイルの内容をDataSetに入れる

んで、コード。

String filename = @"c:\\sample.csv"; // ファイルパス

// データベースへ接続する(今回はCSVファイルを開く)
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Path.GetDirectoryName(filename) + "\\; Extended Properties=\"Text;HDR=YES;FMT=Delimited\"");

// クエリ文字列を作る
// ※ファイルパスを[]でくくること!
OleDbCommand command = new OleDbCommand("SELECT * FROM [" + Path.GetFileName(filename) + "]", connection);

DataSet dataset = new DataSet();
dataset.Clear();    // 念のためクリア

// CSVファイルの内容をDataSetに入れる
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
adapter.Fill(dataset);

// 読み込んだ内容を表示してみる
foreach(DataTable table in dataset.Tables)
{
	foreach(DataRow row in table.Rows)
	{
		// 最初の行は見出しになるので、文字列で指定して値を取得
		Console.WriteLine("{0,10} {1,5}", row["key"], row["value"]);
	}
}

んで、実行してみた結果はこんな感じ。

21914_01

もち、エラー処理は必要。

メモってことで。