かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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();
            }
        }
    }
}

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

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