読者です 読者をやめる 読者になる 読者になる

Morning Girl

Windows, C#, .NET, Dynamics CRM etc..

【C#】【CsvHelper】CsvHelperによるマッピングを利用しないCSV取り込み

Csvファイルの取り込み、書き込みでいいライブラリは無いものかと探していたところ、CsvHelperにたどり着きました。

joshclose.github.io

基本的な使い方としては、データの格納クラスとマッピングするためのクラスを作成して利用するのがベターのようですが、、、。

今回は、動的に変更される可能性のあるCSVファイルを扱うため、とりあえずコレクションに格納するためのプログラムを書いてみました。

次回にでもMappingを利用した形式を書き留めたいと思います。

対象のCSVファイル

Dynamics CRMからまるまるエクスポートして、Csv化したものですが、以下のようなCSVファイルを今回利用します。

取引先企業名,代表電話,住所 1: 市区町村,取引先責任者,電子メール (取引先責任者)
フォース コーヒー (サンプル),03-2232-019x,中間市,早川 諭 (サンプル),someone_a@example.com
リビングウェア (サンプル),03-2232-019x,船橋市,小原 すみ江 (サンプル),someone_b@example.com
アドベンチャー ワークス (サンプル),03-2232-019x,世田谷区,清岡 裕美子 (サンプル),someone_c@example.com
ファブリカム (サンプル),03-2232-019x,世田谷区,佐々木 理恵 (サンプル),someone_d@example.com
ブルー ヤンダー航空 (サンプル),03-2232-019x,東大阪市,佐本 久明 (サンプル),someone_e@example.com
シティ パワー アンド ライト (サンプル),03-2232-019x,神戸市西区,和辺 義隆 (サンプル),someone_f@example.com
コントソ製薬 (サンプル),03-2232-019x,神戸市西区,山元 憲次 (サンプル),someone_g@example.com
アルパイン スキー ハウス (サンプル),03-2232-019x,平塚市,加須 紀夫 (サンプル),someone_h@example.com
エー データム コーポレーション (サンプル),03-2232-019x,神戸市西区,越安 辰夫 (サンプル),someone_i@example.com
コーホー ワイナリー (サンプル),03-2232-019x,世田谷区,友野 史郎 (サンプル),someone_j@example.com

コード

マッピングクラスを利用するときは、GetRecordsメソッドなどで、一括で取得できますが、マニュアル取得をする場合は、CsvReaderクラスのReadメソッドを利用して、1レコードずつ取得・処理していきます。

今回はList<Dictionary<string,string>>に格納したデータを返すクラスを作成してみました。

ファイルパスやエンコーディングコードはそれぞれ指定してあげてください。

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

namespace MyProject.CsvHelperTest
{
    class ReadCsvFileNotMapping
    {
        private string FILE_PATH = "account.csv";
        private int ENCODING_CODE = 932;

        private List<Dictionary<string, string>> _records = new List<Dictionary<string, string>>();
        private Dictionary<string, string> _Fieldes;

        public List<Dictionary<string, string>> Records
        {
            get { return _records; }
        }

        public ReadCsvFileNotMapping()
        {
            using (var _reader = new CsvReader(new StreamReader(FILE_PATH, Encoding.GetEncoding(ENCODING_CODE))))
            {
                // Set ListData and Dictionary for CSV Data 
                while (_reader.Read())
                {
                    _Fieldes = new Dictionary<string, string>();

                    for (int i = 0; i < _reader.CurrentRecord.Length; i++)
                    {
                        _Fieldes[_reader.FieldHeaders[i]] = _reader.CurrentRecord.ElementAt(i);
                    }

                    _records.Add(_Fieldes);
                }

            }
        }
    }
}

Mainプログラム

using System;

namespace MyProject.CsvHelperTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var csv = new ReadCsvFileNotMapping();

            foreach (var fields in csv.Records)
            {
                Console.WriteLine("{0} : {1} : {2} : {3}",
                    fields["取引先企業名"],
                    fields["代表電話"],
                    fields["住所 1: 市区町村"],
                    fields["取引先責任者"]);
            }

            Console.ReadKey();
        }
    }
}

実行結果

以下のような形でデータを取得できました。

f:id:sugimomoto:20150423154540p:plain