前提・実現したいこと
C#でCSVファイルを読みこみ、二次元配列に格納しテキストボックスに出力したい
発生している問題・エラーメッセージ
while文のstring line = sr.ReadLine(); string[] values = line.Split(',');の部分で
いったんCSVファイルを読み込んでしまっているため、table[columu, row] = values[row];
の部分で二次元配列にCSVファイルの一番下の行だけが格納されてしまっている。
該当のソースコード
C#
ソースコード
略
StreamReader sr = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding("Shift_JIS")); { int columu = 0; int row = 0; string[] values = new string[row]; //テーブルの行数(columu)と列数(row)を取得 while (!sr.EndOfStream) { int rowTotal = 0; string line = sr.ReadLine(); string[] values = line.Split(','); for (int i = 0; i < values.Length; i++) { rowTotal = rowTotal + 1; } columu = columu + 1; row = rowTotal / columu; } string[,] table = new string[columu, row]; for (columu = 0;columu < table.GetLength(0);columu++) { string line = sr.ReadLine(); string[] values = line.Split(','); for (row = 0; row < table.GetLength(1); row++) { table[columu,row] = values[row] textBox2.Text += table[columu, row].ToString(); } textBox2.Text += Environment.NewLine; } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
同じループで行えばいいだけでは?
今回はlistを使っていないので(じゃあlistを使えという話ですが)、while文で、いったん配列の大きさを取得しています。配列の大きさを取得する処理と、配列に格納する処理は同時には行えないと判断しました。
(C#を初めて二週間のため、あまり深くは理解していません。すみません)
List を使えという話ですね。使わない理由がありません。LINQ を使うなら話は別ですが。
いまさらながらのお願いですが、コードは ``` と ``` で囲ってもらえませんか(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も見る気がしないのでは? 親切な回答者の方は読んでくれているようですが・・・