フッターコンテンツにスキップ
IRONXLの使用

C#でCSVファイルをリストに変換する方法

In this tutorial for beginners, we are going to see how to read CSV files into a list in C# using the IronXL library. CSVファイルはデータを保存し、システムやアプリケーション間で転送する非常に一般的な方法であるため、これはどのプログラミング言語でも知っておくべき基本的なことの一つです。 プロジェクトのセットアップから効果的にCSVファイルを解析する方法まで、すべてをカバーします。

CSVファイルをC#のリストに変換する方法

  1. Visual StudioでC#コンソールプロジェクトを作成します。
  2. NuGetパッケージマネージャーを使用してC# CSVライブラリをインストールします。
  3. WorkBook.LoadCSVメソッドを使用してCSVファイルをロードします。
  4. ファイルからデータ値を読み込み、リストを構築します。
  5. コンソールにリストを表示します。

プロジェクトのセットアップ

ステップ1: 新しいC#プロジェクトの作成

  1. Visual Studioを開く: コンピューターでVisual Studioを開始します。
  2. 新しいプロジェクトを作成: 「新しいプロジェクトを作成」をクリックします。 これにより、プロジェクトの種類を選択できるウィンドウが開きます。
  3. プロジェクトの種類を選択: シンプルにするために「コンソールアプリ(.NET Core)」をプロジェクトタイプとして選択します。
  4. プロジェクトに名前を付ける: プロジェクトにCSVFileReaderという名前を付けます。
  5. 場所を選択する: このプロジェクトを保存する適切な場所をデバイス上で選択します。
  6. プロジェクトの生成: 「作成」をクリックして新しいC#プロジェクトを初期化します。

ステップ2: IronXLライブラリのインストール

  1. NuGetパッケージマネージャーを開く: Visual Studioで「ツール」メニューに移動し、「NuGetパッケージマネージャー」を選択して「ソリューションのNuGetパッケージを管理...」を選びます。
  2. IronXLを検索: 「参照」タブをクリックして「IronXL.Excel」を検索します。

将来の日々を見越す一貫性ある Web UX向上のために - IronXL

  1. IronXLをインストール: 検索結果でIronXLパッケージを見つけ、選択して「インストール」をクリックします。ライセンス契約に同意し、変更点を確認してください。
  2. インストールを確認する: インストール後、プロジェクトの参照にIronXLが表示されるはずです。

CSVFileReaderプロジェクトはIronXLライブラリでセットアップされており、これでCSVファイルをC#で読み込んで処理を始める準備が整いました。 このセットアップは、チュートリアルの後半部分で行うCSV読取り作業の基礎を形成しています。

CSVファイルの解析と処理

プロジェクトのセットアップが完了し、IronXLライブラリがインストールされたので、CSVファイルの解析と処理に焦点を当てましょう。 自動的に生成されるCSVFileReaderプロジェクト内のProgram.csファイルで作業を行います。

ステップ1: ファイルパスの指定

データを読み取る前に、CSVファイルの場所を知る必要があります。 ファイルパスを格納する変数をMainメソッド内で定義します。

string filename = "csvfile.csv"; // Replace with your actual file path
string filename = "csvfile.csv"; // Replace with your actual file path
Dim filename As String = "csvfile.csv" ' Replace with your actual file path
$vbLabelText   $csharpLabel

ステップ2: CSVファイルのロード

IronXLを使えばCSVファイルのロードは簡単です。WorkBook.LoadCSVメソッドを使って、CSVファイルをWorkBookオブジェクトに読み込みます。

var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
$vbLabelText   $csharpLabel

ステップ3: データ構造の定義

CSVファイル内のデータ構造を表すクラスを作成します。例えば、CSVが人の情報を含んでいる場合、次のようにPersonクラスを定義します。

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class
$vbLabelText   $csharpLabel

ステップ4: CSVデータの解析

このステップでは、CSVファイルを解析してList<Person>にデータを格納します。 IronXLを使用してCSVの読み取りを行い、ヘッダや潜在的空行を考慮してCSVの各行または列を正確に処理するポイントが肝要です。 コードの詳細な内訳は以下の通りです。

List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets[0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells[0].StringValue,
        Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets[0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells[0].StringValue,
        Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
Dim people As New List(Of Person)()
Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
For Each row In csv.WorkSheets(0).Rows
	If isFirstRow Then
		isFirstRow = False ' Set the flag to false after skipping the first row
		Continue For
	End If
	If row.IsEmpty Then
		Continue For ' Skip empty rows
	End If
	Dim cells = row.ToArray()
	Dim person As New Person() With {
		.Name = cells(0).StringValue,
		.Age = Integer.Parse(cells(1).StringValue)
	}
	people.Add(person)
Next row
$vbLabelText   $csharpLabel

この解析プロセスで、最初に解析済みデータを格納するためのList<Person>を初期化し、CSVファイルのヘッダ行をスキップするためにブールフラグisFirstRowを使用します。 foreachループはCSVファイルの各行を反復処理します。最初の反復中にヘッダ行が特定され、スキップされるため、データ行のみが処理されます。 row.IsEmptyを使って各行が空でないことを確認します。 これが空行でのパースエラーを避けるための重要なステップです。

各データ行に対して、行をセルの配列に変換(row.ToArray())し、このデータでPersonオブジェクトを作成します。 Age文字列を整数に変換するなど、データ型を正しく解析し変換することが非常に重要です。 パースされたPersonオブジェクトはpeopleリストに追加されます。このアプローチにより、有効なデータ行のみが処理され、数値列における非数値文字列や予期しない空行などの潜在的な問題を効果的に処理、格納することができます。

ステップ5: データの表示

List<Person>にCSVデータを解析した後、次に重要なのはデータを表示して確認することです。 これにより、解析が成功したことを確認できるだけでなく、出力を観察し、簡単なデータ品質チェックを実施することもできます。 このように実装できます。

foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
For Each person In people
	Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
Next person
$vbLabelText   $csharpLabel

以下が完全なProgram.csコードです。

using IronXL;
using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
{
    string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
    var csv = WorkBook.LoadCSV(filename);
    List<Person> people = new List<Person>();
    bool isFirstRow = true; // Add a flag to check for the first row
    foreach (var row in csv.WorkSheets[0].Rows)
    {
        if (isFirstRow)
        {
            isFirstRow = false; // Set the flag to false after skipping the first row
            continue;
        }
        if (row.IsEmpty) continue; // Skip empty rows
        var cells = row.ToArray();
        var person = new Person()
        {
            Name = cells[0].StringValue,
            Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
        };
        people.Add(person);
    }
    foreach (var person in people)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
{
    string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
    var csv = WorkBook.LoadCSV(filename);
    List<Person> people = new List<Person>();
    bool isFirstRow = true; // Add a flag to check for the first row
    foreach (var row in csv.WorkSheets[0].Rows)
    {
        if (isFirstRow)
        {
            isFirstRow = false; // Set the flag to false after skipping the first row
            continue;
        }
        if (row.IsEmpty) continue; // Skip empty rows
        var cells = row.ToArray();
        var person = new Person()
        {
            Name = cells[0].StringValue,
            Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
        };
        people.Add(person);
    }
    foreach (var person in people)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}
Imports IronXL
Imports System
Imports System.Collections.Generic

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main(ByVal args() As String)
	Dim filename As String = "C:\Users\tayya\Downloads\sample_data.csv" ' Replace with your actual file path
	Dim csv = WorkBook.LoadCSV(filename)
	Dim people As New List(Of Person)()
	Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
	For Each row In csv.WorkSheets(0).Rows
		If isFirstRow Then
			isFirstRow = False ' Set the flag to false after skipping the first row
			Continue For
		End If
		If row.IsEmpty Then
			Continue For ' Skip empty rows
		End If
		Dim cells = row.ToArray()
		Dim person As New Person() With {
			.Name = cells(0).StringValue,
			.Age = Integer.Parse(cells(1).StringValue)
		}
		people.Add(person)
	Next row
	For Each person In people
		Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
	Next person
	End Sub
$vbLabelText   $csharpLabel

コードの出力

ファイルを実行すると、リストのデータがコンソールに表示されます。

C#でリストにCSVファイルを変換する方法: 図2 - リストの出力

異なるデータ型の扱い

CSVファイルで種々のデータ型を扱う際には、各データ列の特定の型にパースロジックを合わせることが重要です。 Personクラスの例では、Nameは文字列でありStringValueを使用して直接割り当てられますが、Ageのような数値フィールドはInt32.ParseConvert.ToInt32を使用して文字列から整数に変換する必要があります。 これは型の不一致エラーを避けるために必須です。

日付のようなより複雑なデータ型については、DateTime.Parseを使って日付の文字列表現をDateTimeオブジェクトに変換します。 CSVファイルで使用される日付形式を認識し、コード内で期待される形式と一致させることが重要です。 一貫しない日付形式は、パースエラーやデータの誤った解釈を引き起こす可能性があります。

結論

IronXLを使ってC#でCSVファイルのデータを読み取って解析し表示する方法を学びました。 このアプローチをさまざまなデータ構造やファイル形式に適用することができます。 これは、C#を主言語として選ぶ開発者にとって、広く役立つスキルを表します。

IronXLはその機能を体験するための無料トライアルをユーザーに提供しています。 トライアル期間が終了すると、IronXLのライセンスは$799の開始価格で始まります。

例外処理や端境条件の扱いは、特に異なるデータ型の管理や大規模ファイルの使用において、より堅牢なコードを書くために取り組む必要があることを忘れないでください。 さらにIronXLの機能を試して、C#でのデータ処理を強化してください。 コーディングを楽しんでください!

よくある質問

C#でCSVファイルをリストに読み込むにはどうすればよいですか?

C#でCSVファイルをリストに読み込むには、IronXLライブラリを使用します。まず、Visual StudioでC#コンソールプロジェクトを作成し、NuGetパッケージマネージャーを介してIronXLをインストールします。次に、WorkBook.LoadCSVメソッドを使用してCSVファイルを読み込み、データをリストに解析します。

C#でCSVファイルを読み込むために使用するメソッドは何ですか?

C#でCSVファイルを読み込むには、IronXLライブラリのWorkBook.LoadCSVメソッドを使用し、パラメーターとしてファイルパスを指定します。

CSVファイルの内容に合わせたデータ構造をどのように定義しますか?

CSVファイルの列に一致するプロパティを持つ、[Person]クラスなどのクラスを定義します。これにより、CSVから取得したデータをオブジェクト指向の形式に構造化するのが容易になります。

CSVファイル内のヘッダ行をスキップするための技法は何ですか?

ヘッダ行をスキップするには、論理フラグを実装して、行が最初のものであるかをチェックし、次のイテレーションに進むことで処理をスキップします。

C#でCSVファイルを解析するときに空行をどのように処理しますか?

IronXLライブラリの行プロパティIsEmptyなどを使用して、空行をチェックし、解析プロセス中にそれらをスキップします。

CSVファイルを処理する際に異なるデータ型を処理することの重要性は何ですか?

異なるデータ型を正しく処理することで、データが適切に処理され、特に数値フィールドや日付フィールドを扱う際に、型の不一致エラーが発生するのを防ぎます。

CSVファイルの処理に伴う一般的な課題は何ですか?

一般的な課題には、さまざまなデータ型を扱うこと、空行や不完全な行をスキップすること、エラーなしでデータの解析と処理を正確に行うことなどが含まれます。

C#でCSVファイル処理時にライブラリを使用する利点は何ですか?

C#でIronXLライブラリを使用してCSVを処理すると、直感的なメソッドのおかげでCSVファイルの読み込みと解析が簡素化され、データを効率的に取り扱うことができます。

CSVファイルを読み取るC#プロジェクトを設定するためにはどのステップを踏むべきですか?

まず、Visual StudioでC#コンソールプロジェクトを作成し、NuGetパッケージマネージャーを使用してIronXLライブラリをインストールし、WorkBook.LoadCSVメソッドを使用してCSVファイルを読み込み、リストに解析します。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。