Csv解析CsvFile
Excel導(dǎo)出是非常常見(jiàn)的需求,而大多數(shù)時(shí)候只需要導(dǎo)出CSV格式文件即可。Csv文件非常簡(jiǎn)單以及快速,除了日常導(dǎo)出報(bào)表,還可以導(dǎo)出大量數(shù)據(jù)用于跨系統(tǒng)數(shù)據(jù)交換,曾經(jīng)多次遇到一次性導(dǎo)出數(shù)百萬(wàn)行數(shù)據(jù)。NewLife.Core 內(nèi)封裝了CsvFile類,用于Csv格式文件讀寫(xiě),同時(shí)支持輸出到Http響應(yīng)流。魔方的導(dǎo)出功能就是由CsvFile類提供支持。
Nuget包:NewLife.Core
源碼地址:https://github.com/NewLifeX/X/blob/master/NewLife.Core/IO/CsvFile.cs
寫(xiě)入文件
Csv文件第一行一般是頭部字段名,也有部分場(chǎng)合不需要頭部字段名。
CsvFile 提供了 WriteLine/WriteAll 作為寫(xiě)入接口,可以WriteLine寫(xiě)入頭部或一行數(shù)據(jù),也可以WriteAll寫(xiě)入一批數(shù)據(jù)。
示例如下:
var file = "data/test.csv";var list = new List<Object[]> {new Object[] { 1234, "Stone", true, DateTime.Now },new Object[] { 5678, "NewLife", false, DateTime.Today } };{using var csv = new CsvFile(file, true);csv.Separator = ',';csv.Encoding = Encoding.UTF8;csv.WriteLine(new[] { "Code", "Name", "Enable", "CreateTime" });csv.WriteAll(list); }var lines = File.ReadAllLines(file.GetFullPath()); Assert.Equal(3, lines.Length); Assert.Equal("Code,Name,Enable,CreateTime", lines[0]); Assert.Equal($"1234,Stone,1,{((DateTime)list[0][3]).ToFullString()}", lines[1]); Assert.Equal($"5678,NewLife,0,{((DateTime)list[1][3]).ToFullString()}", lines[2]);讀取文件
Csv讀取時(shí),也要區(qū)分第一行是否頭部字段名。
CsvFile統(tǒng)一提供了 ReadLine/ReadAll 來(lái)讀取頭部或者數(shù)據(jù)。
示例如下:
using var csv = new CsvFile(file); var headers = csv.ReadLine(); var all = csv.ReadAll();Assert.Equal(4, headers.Length); Assert.Equal("Code", headers[0]); Assert.Equal("Name", headers[1]);Assert.Equal(2, all.Length);總結(jié)
以上是生活随笔為你收集整理的Csv解析CsvFile的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你可能不知道的按位与、或运算技巧
- 下一篇: 聊一聊Load Average