使用IRONXL

如何將 CSV 檔案轉換為 C# 中的清單

發佈 2024年1月27日
分享:

在這個初學者的教程中,我們將會看到如何讀取CSV檔案進入一個C# 清單使用該IronXL圖書館 嗯,這是在任何程式語言中你需要了解的最基本的事情之一,因為 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. 生成專案:點擊“Create”以初始化您的新 C# 專案。

第 2 步:安裝 IronXL 程式庫

  1. 開啟 NuGet 套件管理員:在 Visual Studio 中,進入「工具」選單,然後選擇「NuGet 套件管理員」,再選擇「管理方案的 NuGet 套件...」。

  2. 瀏覽 IronXL:點擊「瀏覽」標籤並搜索「IronXL.Excel」。

    如何在C#中將CSV文件轉換為列表:圖1 - IronXL

  3. 安裝 IronXL:在搜尋結果中找到 IronXL 套件,選擇它並點擊「安裝」。確保您同意任何許可協議並檢查變更。

  4. 檢查安裝:安裝後,您應該在專案的引用中看到 IronXL。

    現在,您的 CSVFileReader 專案已經設置了 IronXL 程式庫,您可以開始使用 C# 讀取和處理 CSV 文件。 這個設置構成了我們在本教程後續部分即將進行的 CSV 讀取任務的基礎。

在 C# 中解析和處理 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
VB   C#

步驟 2:載入 CSV 檔案

IronXL 使載入 CSV 文件變得簡單。使用 WorkBook.LoadCSV 方法將 CSV 文件讀入 WorkBook 對象。

var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
VB   C#

步驟 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
VB   C#

步驟4:解析CSV資料

在此步驟中,我們將解析 CSV 文件並填充一個 List`與資料一起。 我們正在使用 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
VB   C#

在此解析過程中,我們首先初始化一個 List<Person>將解析後的數據存儲起來,並使用一個布林標誌isFirstRow來跳過CSV文件的標題行。`foreach 迴圈會遍歷 CSV 文件的每一行。在第一次迭代期間,識別並跳過標題行,確保僅處理數據行。 然後,我們檢查每一行,以確保它不是空的,使用row.IsEmpty。 這個步驟對於避免空行解析錯誤至關重要。

對於每一行數據,我們將該行轉換為一個單元格數組(row.ToArray()``` ```)然後使用這些數據創建一個Person對象。 正確分析和轉換數據類型至關重要,例如將“Age”字符串轉換為整數。 接著將解析出的Person物件加入我們的people` 列表。這種方法確保只有有效的數據列被處理和儲存,有效地處理可能出現的問題,如數字列中的非數字字串或意外的空行。

步驟 5:顯示數據

將 CSV 數據解析為我們的 `List接下來的重要步驟是顯示和驗證數據。 這不僅有助於確保我們的解析成功,還能讓我們觀察輸出並進行快速的數據質量檢查。 以下是您可以實現此功能的方法:

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
VB   C#

以下是完整的 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
VB   C#

程式碼的輸出

當您運行該文件時,它將在控制台中顯示列表的數據:

如何將 CSV 檔案轉換為 C# 中的列表:圖 2 - 列表輸出

處理不同的數據類型

在處理 CSV 文件中的各種數據類型時,為每個數據列的特定類型調整解析邏輯是很重要的。 在 Person 類別範例中,Name 是字串,可以直接使用 StringValue 指派,但像 Age 這樣的數字欄位需要使用 Int32.ParseConvert.ToInt32 將字串轉換為整數。 這對於避免型別不匹配錯誤至關重要。

對於更複雜的數據類型,例如日期,使用 DateTime.Parse 將日期的字串表示轉換為 DateTime 物件。 重要的是要注意 CSV 文件中使用的日期格式,並確保它與您程式碼中預期的格式相符。 不一致的日期格式可能導致解析錯誤或數據解釋不正確。

結論

您剛剛學習了如何使用 C# 中的 IronXL 來讀取、解析和顯示 CSV 文件的數據。 這種方法可以用於不同類型的資料結構和檔案格式。 因此,這對於所有將C#作為其主要語言選擇的開發者來說,都是一項非常有用的技能。

IronXL 提供一個免費試用供使用者體驗其功能。 試用期結束後,IronXL 的授權價格從 $749 起開始計費。

請記住,例外和邊緣情況必須妥善處理,以編寫更健壯的代碼,特別是在處理不同數據類型和使用大型文件時。 繼續嘗試和探索IronXL的更多功能,以增強您在C#中處理數據的能力。 編碼快樂!

< 上一頁
如何在C#中將CSV導入到Datatable
下一個 >
如何在 VB .NET 中保存 Excel 文件

準備開始了嗎? 版本: 2024.11 剛剛發布

免費 NuGet 下載 總下載次數: 1,111,773 查看許可證 >