2017年5月8日月曜日

【C#】テキストファイル(CSVファイル、タブ区切りファイル)を読み込む

CSVファイル読込をてテキストファイルとして、読み込むプログラムを作成すると、「文字列でスペースやカンマがあった場合」、データ分割できずに、困ってしまいました。

そこで、何か手段ないか調べたところ、TextFieldParserをつかうとうまくできました。


手順は、以下の通りです。
① VisualStudioで、[ソリューションエクスプローラ] => [参照の追加] を選択し、
  プロジェクトにMicrosoft.VisualBasicアセンブリの参照を追加する。
②以下のようなコードを作成する
(サンプルコードは、タブ区切りファイルの例です。CSVの時は、SetDelimitersで","を設定してください)

                using (TextFieldParser parser = new TextFieldParser("test.csv", System.Text.Encoding.GetEncoding("Shift_JIS")))
                {
                    parser.TextFieldType = FieldType.Delimited;
                    parser.SetDelimiters("\t"); // 区切り文字はタブ

                    while (!parser.EndOfData)
                    {
                        nLine++;
                        string[] dataArray = parser.ReadFields(); // 1行読み込み
                        if (dataArray.Length < 0)
                        {
                            Console.WriteLine("データが不正です [{0}行]", nLine);
                            continue;
                        }

                        int nRes = 0;
                        bool bCheck = int.TryParse(dataArray[0], out nRes);
                        if (bCheck == false)
                        {
                            continue;  // 変換エラーなので、次の行に移行
                        }
                        nRecCount++;


                        // 処理
                        DoIt(dataArray);
                    }

                }

【参考URL】
https://www.ipentec.com/document/document.aspx?page=csharp-read-csv-file-by-textfieldparser

EXCELファイル自体の読み込みは、次のURL参考にするといいかもしれません
http://qiita.com/_meki/items/b1f4afcb96f9548d2b81
http://qiita.com/midori44/items/acab9106e6dad9653e73

0 件のコメント:

コメントを投稿