当前位置: 代码网 > it编程>编程语言>Asp.net > C#使用csvhelper实现csv的基本操作

C#使用csvhelper实现csv的基本操作

2024年07月25日 Asp.net 我要评论
新建控制台项目安装csvhelper 33.0.1写入csv新建foo.csnamespace csvsut02;public class foo{ public int id { get; s

新建控制台项目

安装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

读取和写入一样,可以两种方式实现一个是配置类一个是特性,下面都以特性演示

无标题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实现csv的基本操作的详细内容,更多关于c# csvhelper实现csv操作的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com