ここでは、csvファイルの各値がダブルコーテーション(”)で囲まれたデータの読み込みを行うサンプルコードを掲載しています。
最近、ダムとか滝の投稿ばかりでした。自分はプログラマーであることを忘れていました(笑)。
スポンサーリンク
csvファイルの読み込み
CSVファイル内で値としてカンマを使用する場合には、各値をダブルコーテーションで囲む必要がありますが、次のような処理では機能不足となります。
ダブルコーテーションで囲まれている場合には、除去するといった処理が必要です。また、その他エスケープ処理などのcsvの基本的な実装も独自で行うことも大変です。
string csvFilePath = @"g:\test.csv";
using (StreamReader sr = new StreamReader(csvFilePath,
Encoding.GetEncoding("Shift_JIS")))
{
// ヘッダを読み飛ばす(この処理は必要に応じて)
var line = sr.ReadLine();
while (!sr.EndOfStream)
{
// ファイルから一行読み込む
line = sr.ReadLine();
// 読み込んだ一行をカンマ毎に分けて配列に格納する
var cols = line.Split(',');
// この位置で必要な処理を行う
}
}
実際には、上記のような処理でも問題とならないことも多いと思います
TextFieldParserクラスを使う
Microsoft.VisualBasicの「参照の追加」が必要になりますが、TextFieldParserクラスを使用してcsvファイルを読み込むことができます。
この方法だと、ダブルコーテーションの除去やエスケープといった処理もクラス内でやってくれるので、ビジネスロジックの実装に注力できます。
//using Microsoft.VisualBasic.FileIO;
using (TextFieldParser tfp = new TextFieldParser(csvFilePath,
Encoding.GetEncoding("Shift_JIS")))
{
//値がカンマで区切られているとする
tfp.TextFieldType = FieldType.Delimited;
tfp.Delimiters = new string[] { "," };
//値がダブルコーテーションで囲まれているか
tfp.HasFieldsEnclosedInQuotes = true;
//値をトリミングするか否か(お好みで)
tfp.TrimWhiteSpace = false;
// ヘッダを読み飛ばす(必要に応じて)
string[] csvHeader = tfp.ReadFields();
while (!tfp.EndOfData)
{
// 1行読み込む
string[] cols = tfp.ReadFields();
// この位置で必要な処理をする
}
}