質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

40223閲覧

C#でCSVファイルを二次元配列に格納したい

kurosuke___

総合スコア217

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2016/07/12 05:06

こんにちは。

タイトルのとおりですが、C#にて、読み込んだCSVファイルを2次元配列としたいです。
pythonではlist.append()に配列をループで渡していけば2次元配列になっていましたが、C#ではそうはいきませんよねぇ・・・

C#

1public string[][] readingCsv(Form1 form1) 2 { 3 string[] readCsvTempArray = null; 4 if (openFileDialog.ShowDialog() == DialogResult.OK) 5 { 6 form1.readCsvLabel.Text = openFileDialog.FileName; 7 StreamReader readCsvObject = new StreamReader(openFileDialog.FileName, Encoding.GetEncoding("utf-8")); 8 while (!readCsvObject.EndOfStream) 9 { 10 var readCsvLine = readCsvObject.ReadLine(); 11 readCsvTempArray = readCsvLine.Split(','); 12 } 13 } 14 }

webで調べて書いてみて、現在こんなかんじで詰まっています。
読み込むcsvは毎回違うので、2次元配列のサイズを最初に決定しておくことができません。
こういう場合はどうしたらいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ozwk さんのおっしゃる通り、長さが決まっていないものには List を使います。
List を最終的に配列にしたい場合は、ToArray() メソッドを使います。
また、開いたファイルは using を使ってきちんと閉じておきましょう。

C#

1public string[][] readingCsv(Form1 form1) 2{ 3 List<string[]> readCsvList = new List<string[]>(); 4 if (openFileDialog.ShowDialog() == DialogResult.OK) 5 { 6 form1.readCsvLabel.Text = openFileDialog.FileName; 7 using (StreamReader readCsvObject = new StreamReader(openFileDialog.FileName, Encoding.GetEncoding("utf-8"))) 8 { 9 while (!readCsvObject.EndOfStream) 10 { 11 var readCsvLine = readCsvObject.ReadLine(); 12 readCsvList.Add(readCsvLine.Split(',')); 13 } 14 } 15 } 16 return readCsvList.ToArray(); 17}

ちなみに同じことを LINQ を使ってこんな書き方もできます。

C#

1public string[][] readingCsv2(Form1 form1) 2{ 3 if (openFileDialog.ShowDialog() != DialogResult.OK) return null; 4 form1.readCsvLabel.Text = openFileDialog.FileName; 5 return File 6 .ReadLines(openFileDialog.FileName, Encoding.GetEncoding("utf-8")) 7 .Select(s => s.Split(',')) 8 .ToArray(); 9}

投稿2016/07/12 06:29

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosuke___

2016/07/12 06:58

回答有り難うございます。 おお!!すごいです!おかげさまでCSVファイルを読み込んで2次元配列で返すメソッドができました!本当に有難うございます! そうでした・・・ファイル読み書きの際は最後にかならず閉じないとですね LINQですか。名前は聞いたこと有りましたが、こちらのほうが短くかけるようですね。勉強してみます。 とても勉強になる回答で大変満足しています。本当にありがとうございました。
guest

0

配列じゃなくてList<T>を使いましょう。

投稿2016/07/12 06:11

編集2016/07/12 06:12
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosuke___

2016/07/12 06:53

回答有り難うございます。 Listという便利なものがあったなんてしりませんでした・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問