プログラムのことなんてちょろちょろ書いてます。まったり更新でよろしく(;´Д`A ```
むにむにするHP
スポンサーサイト
-----------  CATEGORY: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ページトップへ
CSVを読み込みDataTableへ展開する
2013-03-10-Sun  CATEGORY: C#
CSVファイルを読み込みDataTableに展開します。

CSVファイルはカンマで区切られた複数の項目が1行に存在する、
複数行で構成されたデータ構造であるため、
カンマ区切りの各項目を"列"を見なすした、テーブル構造になります。

テーブル構造ならば、そのままDataTableに展開可能であるため、
CSVファイルを読み込んで、DataTableに落とし込むコードを考えてみます。

今回はCSVファイルの読み込みに、Microsoft.VisualBasic.FileIO.TextFieldParserをします。
さらにDataTableの拡張メソッドとして書式を以下のようにします。

public static void FromCsv(this DataTable dt, string filePath, bool hasHeader, Encoding encoding)

第1引数はCSVから読み込んだ内容を展開するDataTableで、拡張メソッドとするために this をつけます。
第2引数はCSVファイルのパスです。
第3引数はCSVファイルの1行目をヘッダと見なすか判断するためのフラグで、trueなら1行目をヘッダと見なしてヘッダ名をそのままDataTableの列名にします。
falseならヘッダなしと見なしてDataTableの列名を "Column1、Column2、Column3・・・ColumnN" とします。
第4引数はCSVファイルのエンコードを指定します。

尚、各列の型は string とします。


public static void FromCsv(this DataTable dt, string filePath, bool hasHeader, Encoding encoding)
{
// CSVファイルが存在するかチェック
if (!System.IO.File.Exists(filePath)) { throw new System.IO.FileNotFoundException(filePath); }

// DataTableを事前にクリア
dt.Clear();

using (TextFieldParser parser = new TextFieldParser(filePath, encoding))
{
// 区切り形式指定
parser.TextFieldType = FieldType.Delimited;
// ","区切り
parser.SetDelimiters(new string[] { "," });
// ダブルクォート許容
parser.HasFieldsEnclosedInQuotes = true;
// 空白トリム無効
parser.TrimWhiteSpace = false;

// 1行目を基準に列作成
if (!parser.EndOfData)
{
// フィールド区切りで1行読み込み
string[] fields = parser.ReadFields();
// フィールド分のカラム作成
DataColumn[] columns = new DataColumn[fields.Length];
// 列作成
for (int i = 0; i < columns.Length; ++i)
{
string columnName = hasHeader ? fields[i] : "Column" + i;
columns[i] = new DataColumn(columnName, typeof(string));
}
dt.Columns.AddRange(columns);

// ヘッダが存在しない場合のみ1行目もデータとしてDataTableに展開
if (!hasHeader)
{
DataRow row = dt.NewRow();
row.ItemArray = fields;
dt.Rows.Add(row);
}
}

// 残りファイル終端まで読み込み
while (!parser.EndOfData)
{
// フィールド区切りで1行読み込み
string[] fields = parser.ReadFields();
// 行追加
DataRow row = dt.NewRow();
row.ItemArray = fields;
dt.Rows.Add(row);
}
}
}
スポンサーサイト
ページトップへ  トラックバック0 コメント0
コメント

管理者にだけ表示を許可する
 
トラックバック
TB*URL
<< 2017/05 >>
S M T W T F S
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -


余白 Copyright © 2005 むにむにするHP. all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。