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

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

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

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

C#

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

790閲覧

[c#]リスト化した配列の要素の引き出し方について教えてください

moconyan

総合スコア18

CSV

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

C#

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/03/05 07:26

編集2019/03/08 02:04

前提・実現したいこと

CSVファイルを読み込み、名前を入力すると配列化されたデータが画面に表示されるようにしたい。

発生している問題・エラーメッセージ

リスト化が正しくできているのか、確認しようとしたところ
「型 'string[]' を 'string' に暗黙的に変換できません」と表示される
そのままの意味だとは理解しているのですが、リスト化した配列をどのようにすれば引き出せるのかがわかりません。

また名前を入力すると住所や電話番号が画面表示されるようにしたいのですが、いい案が思いつかず行きどまっております。

該当のソースコード

c#


public partial class Form1 : Form
{
public static List<string[]> csvData = new List<string[]>();

public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // csv読込み LoadCsv(); } public void LoadCsv() { try { // csvファイルを開く using (var sr = new System.IO.StreamReader(@"test.csv")) { //ヘッダを読み捨てる。 sr.ReadLine(); // ストリームの末尾まで繰り返す while (!sr.EndOfStream) { // CSVファイルの一行を読み込む string line = sr.ReadLine(); // 読み込んだ一行をカンマ毎に分けて配列に格納する string[] record = line.Split(','); // リストに追加 csvData.Add(record); textBoxName.Text = csvData[1]; //test表示 //エラー } } } catch (System.Exception e) { // ファイルを開くのに失敗したとき MessageBox.Show("ファイルの読み込みに失敗しました。", "エラー", MessageBoxButtons.OK,MessageBoxIcon.Error); } }

試したこと

クラスを作ってみる(クラスに入れてみようと思いましたが「アクセスできない保護レベルになっています」とエラーが出てきてしまい、余計わからなくなってきたのでとりあえずこの中でデータ保持し、画面表示する際に必要なデータだけクラスに入れ画面表示させる方向です。)

配列化し、それを表示させることはできたのですが、全部のデータをロード時に保持したいためリスト化しました。
しかしリスト化した後の表示ができません。(ちゃんとリスト化できてるのかもわかりません)

補足情報

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/05 07:30

コードは ``` と ``` で囲ってください。インデントされて読みやすくなりますので。
moconyan

2019/03/05 08:01

ご指摘ありがとうございます。 今後質問させていただく際は是非そのようにさせていただきます。
退会済みユーザー

退会済みユーザー

2019/03/05 09:00

質問文は修正できるので今からでもそこだけでもやってください。
moconyan

2019/03/08 00:07

何回も試しましたが反映されません。
退会済みユーザー

退会済みユーザー

2019/03/08 01:35

何回も試したそうですが初回の「投稿 2019/03/05 16:26」から一切変わった形跡がないようですけど? コードを ``` と ``` で囲む、即ち以下のようにするのですが・・・(コメント欄では ``` は効きませんが、質問欄と回答欄では有効です) ``` public partial class Form1 : Form // ・・・略・・・ ```
退会済みユーザー

退会済みユーザー

2019/03/08 01:39

あなたが立てた別スレッド https://teratail.com/questions/178306 ではできてますよね。要するにやる気はないということ?
guest

回答3

0

ベストアンサー

List<string[]> csvData

stringに配列のリスト、だから、
textBoxName.Text = csvData[1][0];
とかにしないと。

投稿2019/03/05 07:31

y_waiwai

総合スコア87774

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

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

moconyan

2019/03/05 08:08

ご回答ありがとうございます。 y_waiwai様のコード試させていただきました。 元のコードと同じ場所に入れるとcatch文のほうに流れエラーが表示されましたが、表示ボタンの関数に入れると無事表示することができました。 また私が求めていた回答だった為、こちらの回答をベストアンサーとさせていただきます! 5日間なやんでおりましたが解決でき非常に嬉しく思います。 コード完成まで先は長いですが最後まで頑張りたいと思います。
guest

0

csharp

1textBoxName.Text = string.Join(Environment.NewLine, csvData.Select(l => string.Join(", ",l)));

投稿2019/03/05 07:34

papinianus

総合スコア12705

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

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

moconyan

2019/03/05 08:03

ご回答ありがとうございます。 papinianus様のコードを試させていただくとエラーも怒らず、リスト化したものがすべて表示できました。
guest

0

csharp

1// 先頭1行分のみならこう 2textBoxName.Text = string.Join(",", csvData[0]); //test表示 3// 1行ごとに改行して追記していきたいのだったらこんなかんじ? 4textBoxName.Text += (Environment.NewLine + string.Join(",", record));

投稿2019/03/05 07:32

編集2019/03/05 08:22
runny_nose

総合スコア280

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

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

moconyan

2019/03/05 08:05

ご回答ありがとうございます。 ruuny_nose様のご回答試させていただきました。 元のコードと同じ部分にコードを入れるとcatch文のほうに流れてしまいましたが、表示ボタンの方のコードに入力すると無事表示することができました!!
runny_nose

2019/03/05 08:21 編集

ああ、エラーが出たのは、 csvData[1]で、インデックスに1を指定しているからだと思います。 インデックスは0始まりなので、csvData[1]だと2つ目の要素を表します。 つまり、csvDataがまだ1行分しかできていない状態で2行目のデータを取得しようとしたためにインデックスエラーが起きたかんじです。 回答文の例だとcsvData[0]とするのがただしいですね。もう解決済みで不要だとは思いますが直しておきます。
moconyan

2019/03/05 08:25

なるほど!! エラーが発生した理由を解説をしていただき、納得することができました。 なぜエラーが起こったかを理解することも大切だと思うので、本当ためになりました!! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問