IRONXLの使用

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

リーガン・パン
リーガン・パン
2024年1月27日
共有:

この初心者向けチュートリアルでは、CSVファイルを読む方法を、C#のリストに取り込むためにIronXLライブラリを使用する方法を紹介します。 さて、これはどのプログラミング言語でも知っておくべき基本的な事項の一つです。CSVファイルはデータを保存し、あるシステムやアプリケーションから別のシステムやアプリケーションに転送するための非常に一般的な方法です。 プロジェクトの設定からCSVファイルの効率的な解析まで、すべてをカバーします。

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

  1. Visual StudioでC#コンソールプロジェクトを作成します。

  2. NuGetパッケージマネージャーを使用してC# CSVライブラリをインストールします。

  3. WorkBook.LoadCSV メソッドを使用してCSVファイルを読み込みます。

  4. ファイルからデータ値を読み取り、リストに入力する。

  5. リストをコンソールに印刷します。

プロジェクトの設定

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

  1. Visual Studioを開く: コンピューターでVisual Studioを起動します。

  2. 新しいプロジェクトを作成: 「新しいプロジェクトを作成」をクリックしてください。 これは、プロジェクトの種類を選択できるウィンドウを開きます。

  3. プロジェクトタイプを選択: 簡単のために「Console App (.NET Core)」をプロジェクトタイプとして選んでください。

  4. プロジェクト名: プロジェクトにCSVFileReaderという名前を付けます。

  5. 場所を選択: このプロジェクトを保存するために、デバイス上の適切な場所を選択します。

  6. プロジェクトを生成: 「作成」をクリックして、新しいC#プロジェクトを初期化します。

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

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

  2. IronXL を探す: 「Browse」タブをクリックし、「IronXL.Excel」を検索してください。

    CSVファイルをC#でリストに変換する方法: 図1 - IronXL

  3. IronXLのインストール: 検索結果からIronXLパッケージを見つけて選択し、「インストール」をクリックします。ライセンス契約に同意し、変更内容を確認してください。

  4. インストールの確認: インストール後、プロジェクトの参照にIronXLが表示されているはずです。

    これで、CSVFileReader プロジェクトが IronXL ライブラリで設定され、C# で CSV ファイルを読み込み、処理する準備が整いました。 このセットアップは、このチュートリアルの後続セクションで行うCSV読み取りタスクの基盤を形成します。

C#でCSVファイルを解析および処理する

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

ステップ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>に入力します。 CSVを読み込むためにIronXLを使用しています。CSVの各行やvar lineを正しく処理し、ヘッダーや空行の可能性を考慮することが重要です。 コードの詳細な内訳は次のとおりです:

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: データの表示

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

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;

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;

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

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
End Class
$vbLabelText   $csharpLabel

コードの出力

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

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

異なるデータ型の処理

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

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

結論

CSVファイルのデータをIronXLを使用してC#で読み取り、解析し、表示する方法を学びました。 このアプローチは、さまざまな種類のデータ構造やファイル形式に対して使用することができます。 したがって、これはC#を主な言語として選択するすべての開発者にとって、非常に有用なスキルを表しています。

IronXL は、その機能を体験するための無料トライアルを提供しています。 試用期間が終了すると、IronXLのライセンスは$749から開始されます。

例外やエッジケースに対処することで、異なるデータ型を管理し、大きなファイルを扱う際に、より堅牢なコードを記述する必要があります。 IronXLのより多くの機能を試し、探求して、C#でのデータ処理を強化し続けてください。 楽しいコーディングを!

リーガン・パン
ソフトウェアエンジニア
レーガンはリーディング大学で電子工学の学士号を取得しました。Iron Softwareに入社する前の仕事では、一つのタスクに集中して取り組んでいました。Iron Softwareでは、営業、技術サポート、製品開発、マーケティングのいずれにおいても広範な業務に携わることが最も楽しいと感じています。彼は、Iron Softwareライブラリを開発者がどのように使用しているかを理解し、その知識を使ってドキュメントを継続的に改善し、製品を開発することを楽しんでいます。
< 以前
C#でCSVをデータテーブルにインポートする方法
次へ >
VB .NETでExcelファイルを保存する方法