CSVファイルからStudentインスタンスを生成するサンプル
目次
この記事の目的
- CSV(カンマ区切りテキスト)形式のファイルからデータを読み取り、
- C# のクラスインスタンスにマッピングする手順を学ぶ
- 読み取ったインスタンスをコンソールに出力する
前提
- .NET 6.0 以降が動作する環境
- Visual Studio 2022 などでコンソールアプリケーションを作成できること
- 実行フォルダに「data.csv」を配置していること

サンプルデータ(data.csv)
1,佐藤,170
2,鈴木,165
3,高橋,180
- 項目順:ID, 名前, 身長(cm)
- 行数:3 行
1. Student クラスの定義
/// <summary>
/// 学生情報を表すクラス
/// </summary>
public class Student
{
public int Id { get; }
public string Name { get; }
public int Height { get; }
public Student(int id, string name, int height)
{
Id = id;
Name = name;
Height = height;
}
public override string ToString()
{
return $"ID={Id}, 名前={Name}, 身長={Height}cm";
}
}
2. CSVファイルの読み込みとパース
以下の手順で CSV を読み込み、List<Student> を作成します。
- File.ReadAllLines で全行を取得
- string.Split(',’) でフィールドに分割
- int.TryParse で ID と身長を数値変換
- new Student(…) でインスタンス化し、リストに追加
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
static void Main()
{
const string filePath = "data.csv";
var students = new List<Student>();
try
{
var lines = File.ReadAllLines(filePath);
foreach (var line in lines)
{
var parts = line.Split(',');
if (parts.Length != 3)
{
Console.WriteLine($"警告: 不正な行をスキップ → \"{line}\"");
continue;
}
if (int.TryParse(parts[0], out int id)
&& int.TryParse(parts[2], out int height))
{
string name = parts[1];
var student = new Student(id, name, height);
students.Add(student);
}
else
{
Console.WriteLine($"警告: 数値変換に失敗 → \"{line}\"");
}
}
Console.WriteLine("=== 読み込んだ学生情報 ===");
foreach (var s in students)
{
Console.WriteLine(s);
}
}
catch (IOException ex)
{
Console.WriteLine($"ファイル読み込みエラー: {ex.Message}");
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
static void Main()
{
const string filePath = "data.csv";
var students = new List<Student>();
var lines = File.ReadAllLines(filePath);
foreach (var line in lines)
{
var parts = line.Split(',');
int id = int.Parse(parts[0]);
string name = parts[1];
int height = int.Parse(parts[2]);
var student = new Student(id, name, height);
students.Add(student);
}
Console.WriteLine("=== 読み込んだ学生情報 ===");
foreach (var s in students)
{
Console.WriteLine(s);
}
}
}
internal class Student
{
public Student(int id, string name, int height)
{
Id = id;
Name = name;
Height = height;
}
public int Id { get; }
public string Name { get; }
public int Height { get; }
public override string ToString()
{
return $"ID={Id}, 名前={Name}, 身長={Height}cm";
}
}
3. コード解説
- File.ReadAllLines:ファイルを全行取得し string[] で返す
- Split(’,’):カンマ区切りでフィールド分割
- TryParse:ID・身長を安全に数値変換
- エラーチェック:要素数チェックとパース失敗時の警告表示
- 例外処理:I/O エラーをキャッチしてメッセージ表示
4. 実行結果イメージ
=== 読み込んだ学生情報 ===
ID=1, 名前=佐藤, 身長=170cm
ID=2, 名前=鈴木, 身長=165cm
ID=3, 名前=高橋, 身長=180cm
まとめ
CSV ファイルの読み込みとクラスインスタンス生成は、業務アプリケーションでよく使われる基本パターンです。本サンプルを基に、以下のような応用にも挑戦してみてください。
- 区切り文字を変更(タブやセミコロンなど)
- 大規模データ向けに File.ReadLines を利用
- 複雑な CSV は外部ライブラリ(CsvHelper など)を導入して効率化
この流れを身につけて、より堅牢で拡張性の高いファイル I/O を実現しましょう。
訪問数 3 回, 今日の訪問数 3回
ディスカッション
コメント一覧
まだ、コメントがありません