公司最近有个需求要处理csv档案,必须要将资料库资料转成csv汇出,而且希望每个资料都有双引号,并以逗号分隔,同时也希望能读取csv档案,并把资料更新置资料库中。Nuget上有很多元件可以做到,但用来用去还是推荐CsvHelper,在Nuget上下载量有高人气,足以证明其轻巧好用。
前置准备
如果是使用.net Framework则不需要安装编码套件,若是使用.net core架构,必须先安装编码套件,若直接使用会发生如下exception,以Big5为例
ArgumentException: 'Big5' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
故在Nuget上安装System.Text.Encoding.CodePages
安装完成需注册,放在程序的第一行
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
接着安装CsvHelper,同样也是在Nuget上下载
建立模型要接资料
public class TestModel
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
将资料汇出成csv档案
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var ms = new MemoryStream();
var list = GetTestList(); //去资料库取得list资料
using (TextWriter writer = new StreamWriter(ms, System.Text.Encoding.UTF8))
{
var csv = new CsvHelper.CsvWriter(writer);
csv.Configuration.QuoteAllFields = true;//双引号隔开,预设是没有双引号
csv.WriteRecords(list);
}
byte[] bytes = ms.ToArray();
产出csv结果
"Id","Name","Age" <-换行
"1","Scott","30"<-换行
接着把结果的这个档案再丢进去读取看看
读取csv档案
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//file为前端丢过来的档案,为csv档
using (var ms = new MemoryStream(file))
{
//可使用big5,但.net core需安装System.Text.Encoding.CodePages套件
using (var reader = new StreamReader(ms, Encoding.GetEncoding("big5")))
{
using (var csv = new CsvHelper.CsvReader(reader))
{
ms.Seek(0, SeekOrigin.Begin);
var records = csv.GetRecords<TestModel>().ToList();//转成list,csv第一列栏位需对应class
//records为一笔资料的list
foreach (TestModel record in records)
{
//可针对每笔资料去做事情
record.Id ->1
record.Name -> "Scott"
record.Age -> 30
}
}
}
}
}
参考资料
https://www.cnblogs.com/artech/p/encoding-registeration-4-net-core.html
https://joshclose.github.io/CsvHelper/
<<: 会员管理网站实作篇- (以律师谘询平台为例子) part3
>>: [DAY 28] 回传 Gazebo 当中机器人之座标
安装专案 composer global require laravel/installer //将...
根据FISMA的说法,“完整性意味着防止不当的信息修改或破坏,并且包括确保信息的不可否认性和真实性...
The Abstract Factory pattern provides an interface...
铁人赛学习纪录来到了第28天,今天想来做点轻松的,决定用python做一只会飞的小鸟 首先大概设计一...
第 12 天要来介绍 interface 那麽话不多说,我们就进入正题吧 ─=≡Σ(((っ゚∀゚)っ...