欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用csvhelper實現(xiàn)csv的基本操作

 更新時間:2024年07月25日 09:58:45   作者:假裝我不帥  
CsvHelper 是一個用于讀寫 CSV 文件的.NET庫,極其快速,靈活且易于使用,CsvHelper 建立在.NET Standard 2.0 之上,幾乎可以在任何地方運行,本文給大家介紹了C#使用csvhelper實現(xiàn)csv的基本操作,需要的朋友可以參考下

新建控制臺項目

安裝csvhelper 33.0.1

在這里插入圖片描述

寫入csv

新建Foo.cs

namespace CsvSut02;

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

批量寫入

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        List<Foo> foos = new List<Foo>();
        for (int i = 0; i < 100; i++)
        {
            foos.Add(new Foo()
            {
                Id = i,
                Name = "我是" + i
            });
        }

        var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";
        using (var writer = new StreamWriter(fileName))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            using (var csv = new CsvWriter(writer, config))
            {
                csv.WriteRecords(foos);
            }
        }
    }
}

在這里插入圖片描述

逐條寫入

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        List<Foo> foos = new List<Foo>();
        for (int i = 0; i < 100; i++)
        {
            foos.Add(new Foo()
            {
                Id = i,
                Name = "我是" + i
            });
        }

        var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";
        using (var writer = new StreamWriter(fileName))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            using (var csv = new CsvWriter(writer, config))
            {
	            //這里看過來
                foreach (var foo in foos)
                {
                    csv.WriteRecord(foo);
                    csv.NextRecord();
                }
            }
        }
    }
}

在這里插入圖片描述

增加標題

特性方式

using CsvHelper.Configuration.Attributes;

namespace CsvSut02;

public class Foo
{
    [Name("Id")]
    public int Id { get; set; }
    
    [Name("Name")]
    public string Name { get; set; }
}

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        List<Foo> foos = new List<Foo>();
        for (int i = 0; i < 100; i++)
        {
            foos.Add(new Foo()
            {
                Id = i,
                Name = "我是" + i
            });
        }

        var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";
        using (var writer = new StreamWriter(fileName))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            using (var csv = new CsvWriter(writer, config))
            {
                csv.WriteHeader<Foo>();
                csv.NextRecord(); 
                foreach (var foo in foos)
                {
                    csv.WriteRecord(foo);
                    csv.NextRecord();
                }
            }
        }
    }
}

在這里插入圖片描述

配置類

新建FooClassMap.cs

using CsvHelper.Configuration;

namespace CsvSut02;

public class FooClassMap : ClassMap<Foo>
{
    public FooClassMap()
    {
        Map(m => m.Id)
            .Index(0)
            .Name("id");
        Map(m => m.Name)
            .Index(1)
            .Name("name");
    }
}

修改Program.cs

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        List<Foo> foos = new List<Foo>();
        for (int i = 0; i < 100; i++)
        {
            foos.Add(new Foo()
            {
                Id = i,
                Name = "我是" + i
            });
        }

        var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";
        using (var writer = new StreamWriter(fileName))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            using (var csv = new CsvWriter(writer, config))
            {
                csv.Context.RegisterClassMap<FooClassMap>();
                csv.WriteHeader<Foo>();
                csv.NextRecord();
                foreach (var foo in foos)
                {
                    csv.WriteRecord(foo);
                    csv.NextRecord();
                }
            }
        }
    }
}

在這里插入圖片描述

可能有人覺得麻煩,使用配置類可以保證原始類的純粹,保證poco

讀取csv

讀取和寫入一樣,可以兩種方式實現(xiàn)一個是配置類一個是特性,下面都以特性演示

無標題csv

在這里插入圖片描述

using CsvHelper.Configuration.Attributes;

namespace CsvSut02;

public class Foo
{
    [Index(0)]
    public int Id { get; set; }
    
    [Index(1)]
    public string Name { get; set; }
}

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        var file = "2024_07_24_18_24_00.csv";
        using (var reader = new StreamReader(file))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            config.HasHeaderRecord = false;//沒有頭部
            using (var csv = new CsvReader(reader, config))
            {
                var records = csv.GetRecords<Foo>().ToList();
                foreach (var record in records)
                {
                    Console.WriteLine(record.Id);   
                }
            }
        }
    }
}

在這里插入圖片描述

有標題csv

在這里插入圖片描述

using CsvHelper.Configuration.Attributes;

namespace CsvSut02;

public class Foo
{
    [Name("id")]
    public int Id { get; set; }
    
    [Name("name")]
    public string Name { get; set; }
}

using CsvHelper.Configuration.Attributes;

namespace CsvSut02;

public class Foo
{
    [Name("id")]
    public int Id { get; set; }
    
    [Name("name")]
    public string Name { get; set; }
}

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        var file = "2024_07_24_18_30_49.csv";
        using (var reader = new StreamReader(file))
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture);
            config.HasHeaderRecord = true;//有頭部
            using (var csv = new CsvReader(reader, config))
            {
                var records = csv.GetRecords<Foo>().ToList();
                foreach (var record in records)
                {
                    Console.WriteLine(record.Id);   
                }
            }
        }
    }
}

在這里插入圖片描述

增量寫入

using System.Globalization;
using System.Text;
using CsvHelper;
using CsvHelper.Configuration;

namespace CsvSut02;

class Program
{
    static void Main(string[] args)
    {
        var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";
        WriteModelWithAppend(fileName);
        WriteModelWithAppend(fileName);
    }
    
    /// <summary>
    /// 追加方式寫入
    /// </summary>
    /// <param name="fileName"></param>
    static void WriteModelWithAppend(string fileName)
    {
        var model = new Foo();
        model.Id = 1;
        model.Name = "測試";
        // 檢查文件是否存在,以確定是否應該以追加模式打開  
        var mode = File.Exists(fileName) ? FileMode.Append : FileMode.Create;
        var config = new CsvConfiguration(CultureInfo.InvariantCulture);
        using var writer = new StreamWriter(new FileStream(fileName, mode, FileAccess.Write, FileShare.Read),
            Encoding.UTF8);
        using var csv = new CsvWriter(writer, config);
        
        if (mode == FileMode.Create)
        {
            csv.WriteHeader<Foo>();
            csv.NextRecord(); 
        }
        csv.WriteRecord(model);
        csv.NextRecord(); 
    }
}

在這里插入圖片描述

注意多線程有問題需要加鎖

以上就是C#使用csvhelper實現(xiàn)csv的基本操作的詳細內(nèi)容,更多關于C# csvhelper實現(xiàn)csv操作的資料請關注腳本之家其它相關文章!

相關文章

最新評論