かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

C#でCSVを読み込もう

改行とかカンマとか入ってる本格的なCSVをパースしたいということで、以下のようなサンプルを用意しました。

f:id:okazuki:20141224221934p:plain

データ的には以下のような感じです。

あいうえお,かきくけこ,さしすせそ
"カンマ,入り","改行
入り",どうだろう
空の,,"セル""も""ある行"

CSVを読むクラス

TextFieldParserクラスというものがMicrosoft.VisualBasicというアセンブリにあります!

うん。なので、参照に追加して、以下のようなコードを書けばばっちり読み込めます。

using Microsoft.VisualBasic.FileIO;
using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var parser = new TextFieldParser("sample.csv", Encoding.GetEncoding("Shift_Jis")))
            {
                parser.SetDelimiters(",");
                while (!parser.EndOfData)
                {
                    var lines = parser.ReadFields();
                    Console.WriteLine("-----------");
                    Console.WriteLine("{0}/{1}/{2}", lines[0], lines[1], lines[2]);
                    Console.WriteLine("-----------");
                }

                parser.Close();
            }
        }
    }
}

実行すると以下のようになります。

-----------
あいうえお/かきくけこ/さしすせそ
-----------
-----------
カンマ,入り/改行
入り/どうだろう
-----------
-----------
空の//セル"も"ある行
-----------