お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

文字コードを判別してCSVファイル取込

   2015/08/04

C#でCSVファイルを取り込んで、DataGridViewに表示するような

機能を作成するのですが、

環境によって文字化けする事があります。

事前に文字コードがわかっていればいいのですが、

ファイルによって文字コードがまちまちだったりすると、

ファイルの文字コードの判定処理が必要になります。


今回は文字コードを判別した上での

CSV取り込みをご紹介します。


肝心の文字コード判定の処理は、dobon.net様の記事を参考にしてください。

こちらの記事のGetCode()メソッドで文字コードを取得したのちの、

DataGridViewへのCSV取り込みを行うメソッドはこちらです。

        /// <summary>
        /// ファイル取込
        /// </summary>
        /// <param name="filename">ファイルパス</param>
        private DataTable ImportCSV(string filename, Encoding enc)
        {
            using (var parser = new TextFieldParser(filename, enc))
            {
                var dt = new DataTable();

                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                parser.HasFieldsEnclosedInQuotes = true;

                string[] data = null;

                var isInitialize = true;

                //一行ごとに読み込む
                while (!parser.EndOfData)
                {
                    data = parser.ReadFields();

                    //カラムの数を取得します。
                    int cols = data.Length;

                    if (isInitialize)
                    {
                        for (int i = 0; i < cols; i++)
                        {
                            //カラム名にダミーを設定します。
                            dt.Columns.Add(new DataColumn());
                        }
                        isInitialize = false;
                        //continue;
                    }

                    //DataTableに追加するための新規行を取得します。
                    DataRow row = dt.NewRow();
                    for (int i = 0; i < cols; i++)
                    {
                        if (dt.Columns.Count - 1 < i)
                        {
                            //カラムオーバーのとき、列を増やす
                            //カラム名にダミーを設定します。
                            dt.Columns.Add(new DataColumn());
                        }

                        //カラムの数だけデータを移します。
                        row[i] = data[i];
                    }
                    //DataTableに追加します。
                    dt.Rows.Add(row);

                }
                return dt;
            }
        }

カラム数に応じて、自動的に列生成する仕組みにしています。


それでは、デモにいってみましょう。

取り込むファイルは以下のとおりです。Futureshopへの商品登録用へのファイルです。

aaae


これを取り込んだ結果がこちらです。

まずは、取込前

ccc


そして取込後です。

bbb


みごとに、取り込めました。


この処理を簡単なツール化すれば、英語版のwindows環境などでも

Shift-JISなどで作られたCSVファイルを確認できます。

海外に作業を依頼するときなどはあると便利かもしれませんね。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)