csvファイルを読み込み、すべて配列化しリスト化しました。
リスト内の名前を検索し、同配列内の個別の情報が各テキストボックス内に表示されるようにしたいです。
まず試したことはインデックスを取得し表示させようと思ったのですが、取得できずエラーが出てしまいます。
取得した後に配列を指定する[]内に入れることができないかもしれませんが....
何かいい方法がないかと数日悩んでおりますが解決策が見つからないので質問させていただきました。
よろしくお願いいたします。
c#
1public partial class Form1 : Form 2 { 3 public static List<string[]> csvData = new List<string[]>(); 4 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void Form1_Load(object sender, EventArgs e) 11 { 12 // csv読込み 13 LoadCsv(); 14 } 15 16 public void LoadCsv() 17 { 18 try 19 { 20 // csvファイルを開く 21 using (var sr = new System.IO.StreamReader(@"test.csv")) 22 { 23 //ヘッダを読み捨てる。 24 sr.ReadLine(); 25 // ストリームの末尾まで繰り返す 26 while (!sr.EndOfStream) 27 { 28 // CSVファイルの一行を読み込む 29 string line = sr.ReadLine(); 30 // 読み込んだ一行をカンマ毎に分けて配列に格納する 31 string[] record = line.Split(','); 32 // リストに追加 33 csvData.Add(record); 34 } 35 } 36 } 37 catch (System.Exception e) 38 { 39 // ファイルを開くのに失敗したとき 40 MessageBox.Show("ファイルの読み込みに失敗しました。", "エラー", MessageBoxButtons.OK, 41 MessageBoxIcon.Error); 42 } 43 } 44 45 // 表示ボタン 46 private void buttonView_Click(object sender, EventArgs e) 47 { 48 string InputID = textBoxName.Text; 49 int num = csvData.IndexOf(InputID); //エラー //ここで取得した値は下の[]内にいれることはできるのだろうか...? 50 51 textBoxName.Text = csvData[0][0]; 52 textBoxAge.Text = csvData[0][1]; 53 textBoxGender.Text = csvData[0][2]; 54 textBoxAddress.Text = csvData[0][3]; 55 textBoxTelText = csvData[0][4]; 56 }
List でなければいけませんか?
List でもできなくはありませんが、DataTable の方がきれいに書けます。
また、CSV の形式が定まっている場合は、匿名型や Json を使うと楽です。
やりたいことが今一つ伝わってこないのですが、テキストボックスからどんなデータを取得して何のインデックスとしようとしているのでしょうか?具体的なデータで説明してもらったほうが意図が伝わりやすいと思います。
Zuishin様
特にリストでないければいけないということはありませんが、情報の上書きもできるようにする予定です。
Data Table一度調べさせていただきますありがとうございます。
KoichiSugiyama様
テキストボックスに名前を入力し、それに紐づいた住所や電話番号を各テキストボックスに表示させたいということです。
わかりずらくてすみません...。
同じ名前が複数ある可能性は考慮しなくて良いのですか?
ebiryo様
はい、同じ名前の場合は考慮しなくて大丈夫です!

回答1件
あなたの回答
tips
プレビュー