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

わんくま同盟

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

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

■86287 / 1階層)  C# csvファイル読み込みの質問です
□投稿者/ 魔界の仮面弁士 (1533回)-(2018/01/13(Sat) 17:03:47)
No86281 (普通のサラリーマン さん) に返信
> ReadToData[i,j]の二次元配列に各セル位置に対応する数値を格納させたいのですが、
> ReadToData = new double[heightLength1, widthLength1];
> セルが空欄のときは0を入れる、などの処理をさせるにはどうしたら良いでしょうか?

LINQ で処理できるようにするために、
ReadToData[行,列] の二次元配列の代わりに
ReadToData[行][列] のジャグ配列にするというのはどうでしょう。


// ReadToData[行, 列] の二次元配列の代わりに
// ReadToData[行][列] のジャグ配列にしておく
double[][] ReadToData = { };

private void button1_Click(object sender, EventArgs e)
{
 if (openFileDialog1.ShowDialog() == DialogResult.OK)
 {
  // 「セルが空欄のときに 0.0 にする」ための変換関数
  Func<string, double> ToDouble = s => CDbl(s, 0.0);

  // ファイルを読み取ってジャグ配列にする処理
  ReadToData = File.ReadLines(openFileDialog1.FileName, Encoding.GetEncoding("Shift_JIS"))
   .Select(row => row.Split(new string[] { "," }, StringSplitOptions.None).Select(ToDouble).ToArray())
   .Cast<double[]>().ToArray();
 }
}

double CDbl(string s, double defaultValue = default(double))
{
 return double.TryParse(s, out double dbl) ? dbl : defaultValue;
}


どうしても 2 次元配列の方が良い場合には、ジャグ配列に受け取ってから
 int 行数 = ReadToData.Length;
 int 列数 = (行数 == 0) ? 0 : ReadToData[0].Length;
 //int 最大列数 = ReadToData.Max(cols => cols.Length);
で行数・列数を取得してから、改めて詰め込み直すことになってしまいますが…。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←C# csvファイル読み込みの質問です /普通のサラリーマン 返信無し
 
上記関連ツリー

C# csvファイル読み込みの質問です / 普通のサラリーマン (18/01/12(Fri) 20:00) #86281
Re[1]: C# csvファイル読み込みの質問です / 魔界の仮面弁士 (18/01/12(Fri) 22:06) #86283
Re[1]: C# csvファイル読み込みの質問です / WebSurfer (18/01/13(Sat) 12:53) #86284
│└ Re[2]: C# csvファイル読み込みの質問です / 魔界の仮面弁士 (18/01/13(Sat) 15:47) #86286
C# csvファイル読み込みの質問です / 魔界の仮面弁士 (18/01/13(Sat) 17:03) #86287 ←Now

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信