2009/04/02

C#CSVを扱う

このエントリーをはてなブックマークに追加
CSVを扱うのに、以前は自作関数を使ったりしてましたが、C#2.0以降、TextFieldParserというクラスを使用するとものすごいお手軽に実装できます。
以下は、CSVをDataTableとして扱う関数。


//using Microsoft.VisualBasic.FileIO;
public DataTable LoadCsv(string csvFile) {
DataTable dt = new DataTable();
TextFieldParser parser = new TextFieldParser(csvFile);
using (parser) {
parser.TextFieldType = FieldType.Delimited; // FixedWidthを指定すると固定長のcsvを扱える
parser.SetDelimiters(","); // 区切り文字はカンマ

string[] fields = parser.ReadFields(); // 1行目読み込み
foreach (string column in fields) {
dt.Columns.Add(column); // 1行目を列名とする
}

while (!parser.EndOfData) {
dt.Rows.Add(parser.ReadFields()); // 2行目以降
}
}
return dt;
}

お手軽で、重宝してたんだけど…。
CSVの文字列は通常ダブルコーテーション(")で囲まれてます。ダブルコーテーションで囲まれてる文字のなかでは改行やタブスペースなど使い放題なのですが、二つ以上続く改行をTextFieldParserが勝手に一つにまとめてしまうという現象を確認しました。改行全角スペース改行とかしても、まとめられます。意味はともかく、呼び出し先で意図的にやってるとしか思えませんので、ご注意ください。
Microsoft.VisualBasic.FileIO内にあるくらいだから、やっぱり異端なのでしょうか。

0 件のコメント :

コメントを投稿