我在TSV(制表符分隔值)数据中有未转义的双引号,我想在使用CsvHelper阅读时保留它们。例如:
Column1 Column2 Column3
Value "1" Value "2" Value "3"
现在我的CsvConfiguration
看起来像这样:
new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = true,
Delimiter = "/t",
NewLine = "/r/n",
IgnoreBlankLines = true,
MissingFieldFound = null,
HeaderValidated = null,
CacheFields = true,
PrepareHeaderForMatch = args => args.Header.Trim(),
TrimOptions = TrimOptions.Trim,
LineBreakInQuotedFieldIsBadData = false,
};
我可以设置BadDataFound = null
,但由于Value "2"
不被认为是坏的,我不确定这是否是一个有效的选项。
2条答案
按热度按时间i2loujxw1#
TSV,Tab-Separated Values文本文件格式由美国国会图书馆as follows定义:
制表符分隔值(TSV)文件是一种文本格式,其主要功能是将数据存储在表结构中,其中表中的每条记录都记录为文本文件的一行。记录中的字段值由制表符分隔。标题行可以提供有关表列语义的信息。
...字段值不能包含制表符或新行字符,因此将纯文本转换为TSV需要以下转义符(括号中包含相应的ASCII代码):
\n
用于换行符(ascii 0x 0a)\t
用于选项卡(ascii 0x 09)\r
用于回车(ASCII 0x 0 d)\\
表示反斜杠(ASCII 0x 5c)通过设置
CsvConfiguration.Delimiter = "\t"
,您可以轻松地使CsvHelper使用Tab字符作为分隔符,但是LoC指定的转义符与CsvHelper支持的任何escaping modes都不对应。1.设置
CsvConfiguration.Mode = CsvMode.NoEscape
以禁用CsvHelper的转义。1.为
string
编写自己的custom type converter,手动处理转义,然后全局注册。首先定义以下
ITypeConverter
和扩展方法:现在,如果你的唱片模型看起来像。
您将能够反序列化TSV字符串,如下所示:
备注:
演示小提琴here。
lo8azlld2#
你可以使用
CsvMode.NoEscape
,这只是意味着你不能在任何字段中使用换行符或制表符。