.net解析csv(C#導表工具)

前言

解析Excel有知名的NPOI庫,(Java語言是POI),可是NPOI是不支持解析csv的。html

csv本質上也是文本文件,能夠進行差別對比,更利於解決衝突。git

本文對解析csv的幾個.net的開源庫進行調研github

性能測試

本次性能測試結果來自:.NET Core中的CSV解析庫數據結構

當測試100000行數據的時候工具

當測試1000000行數據的時候性能

從測試結果上看
Tiny Csv Parser的效率比CSVHelper高不少,內存佔用也少不少。測試

最終結論
當不須要支持字符串換行的時候,請使用Tiny Csv Parser
當須要支持字符串換行的時候,請使用CSVHelper

測試csv

第二行中有人爲換行符,在Tiny Csv 和 csv中會解析不出來,而CSVHelper則能夠

Make Model Comment
內容1 內容2 這是一個換行,
的內容
內容2-1 內容2-1 單行註釋

CSVHelper示例

若是要讀取某行的原始數據,基本內容是在 csvReader.Context 字段

public static void ParseCsvDemo(string filePath)
{
    CsvReader csvReader = null;
    using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        using (StreamReader reader = new StreamReader(fileStream, Encoding.GetEncoding("GB2312")))
        {
            csvReader = new CsvReader(reader);
            //設置以後,不讀取第一列,且列數也會減小
//                    csvReader.Configuration.HasHeaderRecord = false;

            int rowCount = 0;
            while (csvReader.Read())
            {
                //列數
                var columnCount = csvReader.Context.Record.Length;
                //每行的原始數據
                var raw = csvReader.Context.RawRecord;
                rowCount = rowCount + 1;
                if (rowCount == 2)
                {
                    var fileName = csvReader.GetField<string>(2);
                    Console.WriteLine("輸出名:{0}", fileName);
                }
                Console.WriteLine("行:{0} ,列:{1},內容:{2}", rowCount, columnCount, raw);
            }
        }
    }
}

注:對於csvhelper提供的映射關係(把表的一行數據結構轉成 class類型),我未使用到,由於咱們主要是提取表的數據。

使用情景

使用C#開發的導表工具,能夠導出excel和csv,支持把excel數據插入到SQL數據庫,且Excel的格式能夠自定義。

這個項目已開源,可參考我以前的文章:

TableML Excel編譯/解析工具

TableML-GUI篇(C# 編譯/解析 Excel/CSV工具)

遇到問題

問題:未能加載文件或程序集,或它的某一個依賴項。找到的程序集清單定義與程序集引用不匹配

解決方案: 使用nuget更新使用到的庫或者檢查庫所依賴的.net framework版本和項目的基於的.net framework版本是否一致。

相關文章
相關標籤/搜索