ここでは、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(); // この位置で必要な処理をする } }