C#で、CSVを簡単に読み込む

CSVを読み込むクラスは

TextFieldParser
TextFieldParser クラス (Microsoft.VisualBasic.FileIO)

なのだが、C#では標準で使えないので、手動でVisual Basicのクラスをプロジェクトに取り込まなければならない。

そのやり方は

下記のようにソリューションエクスプローラから参照設定を右クリックして

f:id:tatuas:20121106210124j:image

参照の追加を開く。

下記のように

f:id:tatuas:20121106210125j:image

で、Microsoft.VisualBasicを選択すれば準備完了。

あとはProgram.csに

using Microsoft.VisualBasic.FileIO;

と記述すればTextFieldParserが使えるようになる。

以下にCSVを読み込むサンプルを示す。
コンソールアプリケーションを作ってから、以下のソースを追加。
ちなみに下記サイトを参考にした。
CSVファイルを読み込むには?[2.0のみ、C#、VB] - @IT

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// これの追加を忘れない
using Microsoft.VisualBasic.FileIO;

namespace testProgram1 {
    class Program {
        static void Main(string[] args) {

		TextFieldParser parser = new TextFieldParser("test.csv", System.Text.Encoding.GetEncoding("Shift_JIS"));
		parser.TextFieldType = FieldType.Delimited;
		// 区切り文字はコンマ
		parser.SetDelimiters(","); 

		while (!parser.EndOfData) {
			// 1行読み込み
			string[] row = parser.ReadFields();
			foreach (string field in row) {
				string f = field;
				// 改行をnで表示
				f = f.Replace("\r\n", "n");
                                // 空白を_で表示 
				f = f.Replace(" ", "_");
				// TAB区切りで出力 
				Console.Write(f + "\t"); 
			}
		}
	}
}

読み込むCSVファイルも作っておく。

test.csv

1,やまだ,ウサギ
2,たなか,ネコ
3,さとう,ヒツジ

相対パスの時(サンプルコードままで実行するときとか)は
当たり前だが、実行する前にプロジェクトのEXEファイルと同じディレクトリに
CSVファイルを設定することを忘れないこと。
デフォルトだと、
マイドキュメントのVisual Studio 2010>Projects>プロジェクト名>プロジェクト名>bin>Debug
にEXEファイルがある。

絶対パスの時は
C:\testdir\test.csv
なら
C:¥¥testdir¥¥test.csv
(C:\\testdir\\test.csv
と¥(\)マークを2回繰り返すのを忘れずに。


f:id:tatuas:20121106212714j:image

上記写真のGUIの再生ボタンから実行すると、あっという間に実行画面が終了し消えるので
キーボードから

Ctrl + F5

を叩いて実行する。

f:id:tatuas:20121106213144j:image

実行できた!