以下は、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 件のコメント :
コメントを投稿