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

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

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

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

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

Q&A

解決済

1回答

617閲覧

C# csvファイルを読み込んでDataGridに表示する

kkg_No_05

総合スコア13

CSV

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

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

0グッド

0クリップ

投稿2018/06/25 05:31

前提・実現したいこと

https://qiita.com/7of9/items/f9583159827d5f80a897
のサンプルコードを参考にしています。

A, 1
B, 2
C, 3
の様な形式のcsvファイル

ファイルの行数(要素数)は増減することを想定して、変数として扱いたい
最終的に扱いたいファイルの行数は100行前後になります

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

下記のsplitの箇所で、行数を変数として修正したいです

C#

1var data = from l in lines.Skip(1) 2 let split = l.Split(',') 3 select new Person 4 { 5 Name = split[0], 6 Race = split[1], 7 Codename = split[2] 8 };

該当のソースコード

C#

1public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 } 7 8 private void B_read_Click(object sender, RoutedEventArgs e) 9 { 10 string appPath = System.AppDomain.CurrentDomain.BaseDirectory; 11 string filename = "test.csv"; 12 string filepath = appPath + "\" + filename; 13 if (File.Exists(filepath) == false) { 14 return; 15 } 16 this.DataContext = PersonService.ReadFile(filepath); 17 PersonService.SetHeaders(filepath, dg1); 18 } 19 } 20 21 // Name, Race, Codename 22 public class Person 23 { 24 public string Name { get; set; } 25 public string Race { get; set; } 26 public string Codename { get; set; } 27 } 28 public static class PersonService 29 { 30 public static List<Person> ReadFile(string filepath) 31 { 32 var lines = File.ReadAllLines(filepath); 33 34 var data = from l in lines.Skip(1) 35 let split = l.Split(',') 36 select new Person 37 { 38 Name = split[0], 39 Race = split[1], 40 Codename = split[2] 41 }; 42 return data.ToList(); 43 } 44 public static void SetHeaders(string filepath, DataGrid dataGrid) 45 { 46 var lines = File.ReadAllLines(filepath); 47 48 int idx = 0; 49 foreach(var aline in lines[0].Split(',')) 50 { 51 dataGrid.Columns[idx].Header = aline; 52 idx++; 53 } 54 } 55 }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

行と列を誤解していると思います。エクセルで右に伸びるのは列。

let split = l.Split(',')というところは別に3列と限定していないので、現状で、int n = 56;が定義されているとすればsplit[n]が可能です。

ただ、Personクラスにせよ、そうでないにせよ、何列目が何の意味かが分からなければデシリアライズできないと思うのですが、どのような使い方を想定しているのでしょうか?
(PersonのNameが1列目(0番)であることは必然ではないかもしれないですが、28列目なのか、73列目なのか知っていなければ決められませんよね?ヘッダから取るのでしょうか?)

投稿2018/06/25 14:03

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問