CsvHelper - 如何配置关于报价的设置?
CsvHelper - How to config the setting about quote?
当规格数据有引号(“Jake”)时,我在下面收到一条错误消息。
"CsvHelper.BadDataException:您可以通过将 BadDataFound 设置为 null 来忽略不良数据。"
当我删除日志的引用 (Jake) 时它会起作用。
所以问题是如何配置关于报价的设置?
注意日志中有一个没有引号的列。
CSV
Id,Name,Type
1, "Jake",User
地图
public LogProfile()
{
Map(m => m.Id).Name("Id");
Map(m => m.Name).Name("Name");
Map(m => m.Type).Name("Type");
}
转换
const string headerPrefix = "Id,";
var path = @"D:\test.csv";
var readConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = x => x.Field.Contains("\"")
};
var input = new List<LogRecord>();
using (var reader = new StreamReader(path))
using (var csv = new CsvReader(reader, readConfiguration))
{
csv.Context.RegisterClassMap<LogProfile>();
var isHeader = true;
while (csv.Read())
{
if (isHeader)
{
if(csv.Parser.RawRecord.Contains(headerPrefix))
{
csv.ReadHeader();
isHeader = false;
}
continue;
}
input.Add(csv.GetRecord<LogRecord>());
}
}
Logger.LogInformation($"Done {path}");
尝试使用 TrimOptions.Trim
的 Configuration
设置。
void Main()
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
TrimOptions = TrimOptions.Trim
};
using (var reader = new StringReader("Id,Name,Type\n1, \"Jake\",User"))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<LogRecord>();
}
}
public class LogRecord
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
当规格数据有引号(“Jake”)时,我在下面收到一条错误消息。
"CsvHelper.BadDataException:您可以通过将 BadDataFound 设置为 null 来忽略不良数据。"
当我删除日志的引用 (Jake) 时它会起作用。
所以问题是如何配置关于报价的设置?
注意日志中有一个没有引号的列。
CSV
Id,Name,Type
1, "Jake",User
地图
public LogProfile()
{
Map(m => m.Id).Name("Id");
Map(m => m.Name).Name("Name");
Map(m => m.Type).Name("Type");
}
转换
const string headerPrefix = "Id,";
var path = @"D:\test.csv";
var readConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = x => x.Field.Contains("\"")
};
var input = new List<LogRecord>();
using (var reader = new StreamReader(path))
using (var csv = new CsvReader(reader, readConfiguration))
{
csv.Context.RegisterClassMap<LogProfile>();
var isHeader = true;
while (csv.Read())
{
if (isHeader)
{
if(csv.Parser.RawRecord.Contains(headerPrefix))
{
csv.ReadHeader();
isHeader = false;
}
continue;
}
input.Add(csv.GetRecord<LogRecord>());
}
}
Logger.LogInformation($"Done {path}");
尝试使用 TrimOptions.Trim
的 Configuration
设置。
void Main()
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
TrimOptions = TrimOptions.Trim
};
using (var reader = new StringReader("Id,Name,Type\n1, \"Jake\",User"))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<LogRecord>();
}
}
public class LogRecord
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}