From 49cb28c71830731ecf7315214e6d456d11f36c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E4=B8=A5=E9=87=8D?= Date: Thu, 29 Dec 2022 19:36:03 +0000 Subject: [PATCH] =?UTF-8?q?CsvConfiguration=20=E6=B7=BB=E5=8A=A0=20SplitFn?= =?UTF-8?q?=20=E5=A7=94=E6=89=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 韩严重 --- src/MiniExcel/Csv/CsvConfiguration.cs | 5 +++-- src/MiniExcel/Csv/CsvReader.cs | 15 +++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/MiniExcel/Csv/CsvConfiguration.cs b/src/MiniExcel/Csv/CsvConfiguration.cs index b49c976..9e38903 100644 --- a/src/MiniExcel/Csv/CsvConfiguration.cs +++ b/src/MiniExcel/Csv/CsvConfiguration.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text; @@ -9,7 +9,8 @@ public class CsvConfiguration : Configuration private static Encoding _defaultEncoding = new UTF8Encoding(true); public char Seperator { get; set; } = ','; - public string NewLine { get; set; } = "\r\n"; + public string NewLine { get; set; } = "\r\n"; + public Func SplitFn { get; set; } public Func StreamReaderFunc { get; set; } = (stream) => new StreamReader(stream, _defaultEncoding); public Func StreamWriterFunc { get; set; } = (stream) => new StreamWriter(stream, _defaultEncoding); diff --git a/src/MiniExcel/Csv/CsvReader.cs b/src/MiniExcel/Csv/CsvReader.cs index 50d8eb3..01616ad 100644 --- a/src/MiniExcel/Csv/CsvReader.cs +++ b/src/MiniExcel/Csv/CsvReader.cs @@ -1,4 +1,4 @@ -using MiniExcelLibs.OpenXml; +using MiniExcelLibs.OpenXml; using MiniExcelLibs.Utils; using System; using System.Collections.Generic; @@ -73,9 +73,16 @@ public IEnumerable> Query(bool useHeaderRow, string private string[] Split(string row) { - return Regex.Split(row, $"[\t{_config.Seperator}](?=(?:[^\"]|\"[^\"]*\")*$)") - .Select(s => Regex.Replace(s.Replace("\"\"", "\""), "^\"|\"$", "")).ToArray(); - //this code from S.O : https://stackoverflow.com/a/11365961/9131476 + if (_config.SplitFn != null) + { + return _config.SplitFn(row); + } + else + { + return Regex.Split(row, $"[\t{_config.Seperator}](?=(?:[^\"]|\"[^\"]*\")*$)") + .Select(s => Regex.Replace(s.Replace("\"\"", "\""), "^\"|\"$", "")).ToArray(); + //this code from S.O : https://stackoverflow.com/a/11365961/9131476 + } } public Task>> QueryAsync(bool UseHeaderRow, string sheetName, string startCell,CancellationToken cancellationToken = default(CancellationToken)) -- Gitee