C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86281 / )  C# csvファイル読み込みの質問です
□投稿者/ 普通のサラリーマン (1回)-(2018/01/12(Fri) 20:00:02)

分類:[C#] 

複数行、複数列のセルに数値が入力されているcsvファイルがあります。
(厳密には数値が入っていなくて空欄のセルも存在。)

C#プログラムでボタンを押してcsvファイルを読み込んで
ReadToData[i,j]の二次元配列に各セル位置に対応する数値を格納させたいのですが、
空欄のセルが存在するところでインデックス境界外というエラーで読み込めません。
(読み込んだcsvファイル、全て数値が埋まっていればうまくいきます。)
セルが空欄のときは0を入れる、などの処理をさせるにはどうしたら良いでしょうか?

        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                StreamReader sr1 = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding("Shift_JIS"));
                string strStream = sr1.ReadToEnd();
                System.StringSplitOptions option1 = StringSplitOptions.RemoveEmptyEntries;

                string[] lines1 = strStream.Split(new char[] { '\r', '\n' }, option1);
                char[] spliter1 = new char[1] { ',' };

                int heightLength1 = lines1.Length;
                int widthLength1 = lines1[0].Split(spliter1, option1).Length;

                label10.Text = heightLength1.ToString();
                label8.Text = widthLength1.ToString();

                ReadToData = new double[heightLength1, widthLength1];

                for (int i = 0; i < heightLength1; i++)
                {
                    for (int j = 0; j < widthLength1; j++)
                    {
                        string[] readStrData1 = lines1[i].Split(spliter1, option1);

                        if (double.TryParse(readStrData1[j], out ReadToData[i,j]))
                        {

                        }
                        else
                        {
                            ReadToData[i, j] = 0;
                        }
                    }
                }

            }
            else
            {
            }

            Refresh();
        }

返信 編集キー/


管理者用

- Child Tree -