精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#.NET使用CsvHelper快速讀取和寫入CSV文件

admin
2024年12月25日 12:26 本文熱度 488

引言 

在.NET開發(fā)過程中,我們常常需要處理CSV文件,進行數(shù)據(jù)的導(dǎo)入、導(dǎo)出和交換。CSV文件因其結(jié)構(gòu)簡單、易于閱讀和編輯而被廣泛使用。然而,手動讀寫CSV文件可能會遇到各種問題,如分隔符處理、數(shù)據(jù)類型轉(zhuǎn)換等。幸運的是,有一個強大的開源庫——CsvHelper,它能夠幫助我們快速、高效地讀取和寫入CSV文件。本文將詳細介紹CsvHelper的安裝、使用方法以及一些高級特性,讓你在.NET項目中輕松處理CSV數(shù)據(jù)。

CsvHelper簡介 

CsvHelper是一個.NET開源、快速、靈活、高度可配置、易于使用的用于讀取和寫入CSV文件的類庫。它建立在.NET Standard 2.0之上,幾乎可以在任何地方運行。CsvHelper支持讀寫自定義類對象,具有自動類型轉(zhuǎn)換、自定義類型轉(zhuǎn)換器和靈活的映射選項等功能。

安裝CsvHelper 

要使用CsvHelper,首先需要將其安裝到項目中。可以通過NuGet包管理器來安裝:

  • 使用包管理器控制臺:
    Install-Package CsvHelper
  • 使用.NET CLI:
    dotnet add package CsvHelper
    安裝完成后,就可以在項目中引用CsvHelper并開始使用了。

讀取CSV文件 

讀取所有記錄

假設(shè)我們有一個CSV文件,內(nèi)容如下:

Id,Name
1,Tom
2,Jerry

以及一個對應(yīng)的類定義:

public class Person
{
    public int Id { getset; }
    public string Name { getset; }
}

如果CSV文件的列名與類屬性名稱匹配,我們可以無需任何配置就可讀取文件:

using (var reader = new StreamReader("path/to/file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    var records = csv.GetRecords<Person>().ToList();
}

GetRecords方法將返回一個IEnumerable<Person>,它會按需yield記錄。這意味著當你遍歷記錄時,每次只返回一條記錄,只有文件的一小部分被讀入內(nèi)存。

逐條讀取

如果需要逐條讀取CSV文件中的記錄,可以使用以下代碼:

using (var reader = new StreamReader("path/to/file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    while (csv.Read())
    {
        var record = csv.GetRecord<Person>();
        // 處理每條記錄
    }
}

這種方式在處理大型CSV文件時非常有用,因為它不會一次性將所有數(shù)據(jù)加載到內(nèi)存中。

讀取單個字段

有時我們只需要讀取CSV文件中的某些字段,而不是整個記錄。可以使用GetField方法來實現(xiàn):

using (var reader = new StreamReader("path/to/file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    csv.Read();
    csv.ReadHeader();
    while (csv.Read())
    {
        var id = csv.GetField<int>(0);
        var name = csv.GetField<string>("Name");
        // 處理字段
    }
}

這里GetField<int>(0)表示獲取第一列的整數(shù)值,GetField<string>("Name")表示獲取名為"Name"的列的字符串值。

寫入CSV文件 

寫入所有記錄

寫入CSV文件時,可以一次性寫入所有記錄:

var records = new List<Person>
{
    new Person { Id = 1, Name = "Tom" },
    new Person { Id = 2, Name = "Jerry" },
};
using (var writer = new StreamWriter("path/to/file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(records);
}

這將根據(jù)Person類的屬性順序?qū)⒂涗泴懭隒SV文件。

逐條寫入

如果需要逐條寫入記錄,可以使用以下代碼:

using (var writer = new StreamWriter("path/to/file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    foreach (var record in records)
    {
        csv.WriteRecord(record);
    }
}

這種方式在處理動態(tài)生成的數(shù)據(jù)時非常有用。

逐字段寫入

還可以逐字段寫入CSV文件:

using (var writer = new StreamWriter("path/to/file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteHeader<Person>();
    csv.NextRecord();
    foreach (var record in records)
    {
        csv.WriteField(record.Id);
        csv.WriteField(record.Name);
        csv.NextRecord();
    }
}

這種方式可以更靈活地控制字段的寫入順序。

高級特性 

特性

CsvHelper提供了多種特性,用于配置字段的映射和處理方式:

  • Index:標記字段順序,適用于沒有標題的CSV文件。
  • Name:指定字段名稱,當字段名稱與列名不一致時使用。
  • Ignore:忽略某個字段,不將其寫入CSV文件。
  • Optional:標記字段為可選,當字段缺失時不會拋出異常。

配置

CsvHelper的配置非常靈活,可以通過CsvConfiguration類進行各種設(shè)置:

  • Delimiter:指定字段分隔符,默認為逗號。
  • HasHeaderRecord:指定CSV文件是否有標題記錄。
  • IgnoreBlankLines:忽略空行。
  • AllowComments:允許注釋行。
  • BadDataFound:處理包含不良數(shù)據(jù)的行。

自定義類型轉(zhuǎn)換器

CsvHelper允許我們自定義類型轉(zhuǎn)換器,以滿足特定的數(shù)據(jù)轉(zhuǎn)換需求。例如,可以創(chuàng)建一個自定義的日期轉(zhuǎn)換器:

public class CustomDateConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return DateTime.ParseExact(text, "yyyy-MM-dd", CultureInfo.InvariantCulture);
    }
}

然后在類屬性上使用該轉(zhuǎn)換器:

public class Person
{
    [TypeConverter(typeof(CustomDateConverter))]
    public DateTime BirthDate { getset; }
}

結(jié)論 

CsvHelper作為一個功能強大且易于使用的.NET庫,極大地簡化了CSV文件的讀寫操作。它不僅支持基本的讀寫功能,還提供了豐富的配置選項和高級特性,能夠滿足各種復(fù)雜的數(shù)據(jù)處理需求。無論是數(shù)據(jù)導(dǎo)入導(dǎo)出、數(shù)據(jù)交換還是其他需要處理CSV文件的場景,CsvHelper都是一個值得信賴的工具。希望本文能夠幫助你在.NET項目中更高效地使用CsvHelper,提升開發(fā)效率和數(shù)據(jù)處理能力。


該文章在 2024/12/25 16:15:11 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲国产精品视频 | 亚洲制服欧美自拍另类 | 三a级做爰片免费观看 | 日韩欧美亚洲中文乱码 | 欧美日韩1区2区在线观看 | 一区二区三区人妻网站 | gay日韩男男gv片在线观看 | 国产人成高清在线视频99 | 国产美女亚洲精品久久久综合毛片欧美 | 亚洲国产精品高清线久久dvd | 亚洲成av人片不卡无码 | 风情韵味人妻hd | 日韩精品无码中文字幕电影 | 加勒比高清无码 | 污污内射久久一区二区欧美日韩 | 精品欧美一区二区在线观看欧美熟 | 精品久久久久久久久免费高清 | 亚洲国产精品人人做人人 | 国产成人8x视频在线播放 | 制服师生一区二区三区在线 | 人妻无码喷水 | 国产色精品久久人妻无码看片 | 国产在线拍揄自揄拍免费下 | 国产成人免费高清av | 最新国产爆乳视频在线观 | 成人做爰69片免费看网站野花 | 激情区区偷拍区图片区 | 日韩免费电影 | 蜜桃臀无码内射一区二区三区 | 国产精品麻豆电影在线观看 | 99精品国产免费观看视频 | 人妻无码AⅤ中文系列久久免费 | 国产成人无码精品久久久 | 高辣H小黄文 | 亚洲精品久久精品一区二区 | 久久久无码精品午夜资讯 | 久久亚洲日韩精品一区二区三区 | 亚洲专区在线播放 | 久久久久亚洲AV片无码乐播 | 日韩麻豆国产精品欧美 | 麻豆国产一级片在线观看 |