これまた野暮用。
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
処理の順番はこんな感じ。
- データベースに接続する(今回はCSVファイルを開くってことになる)
- クエリ文字列を作る
- 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"]);
}
}
んで、実行してみた結果はこんな感じ。
もち、エラー処理は必要。
メモってことで。
