使用 CSVHelper 解析内容中带有引号的管道分隔文件
Using CSVHelper to parse a pipe deliminated file with quotes in the content
我有一个外部生成的管道分隔文件,我试图使用 .NET CSVHelper 对其进行解析并输入 SQL 数据库,但我发现了一个问题。主要问题是内容中有引号,但分隔符是竖线,引号没有转义。
假设这是文件
ID|Price|Description|stock
133|55.89|Standard Electric Drill|23
134|3.40|3.5" Drill Bit|56
我已将分隔符设置为管道,但当它到达描述中带有引号的记录(在本例中为 ID 134,引号“表示英寸”)时出错。该错误建议将 BadDataFound 设置为 Null,但会忽略记录吗?
是否有我遗漏的允许此操作的配置?或者最好的方法是简单地用 {quote} 或其他东西替换引号,解析它然后在将其输入数据库之前替换回去?
只要没有字段包含管道符或换行符,NoEscape
模式就应该有效。
void Main()
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Mode = CsvMode.NoEscape,
Delimiter = "|"
};
using (var reader = new StringReader("ID|Price|Description|stock\n133|55.89|Standard Electric Drill|23\n134|3.40|3.5\" Drill Bit|56"))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<Foo>().Dump();
}
}
public class Foo
{
public int ID { get; set; }
public string Price { get; set; }
public string Description { get; set; }
public int stock { get; set; }
}
我有一个外部生成的管道分隔文件,我试图使用 .NET CSVHelper 对其进行解析并输入 SQL 数据库,但我发现了一个问题。主要问题是内容中有引号,但分隔符是竖线,引号没有转义。
假设这是文件
ID|Price|Description|stock
133|55.89|Standard Electric Drill|23
134|3.40|3.5" Drill Bit|56
我已将分隔符设置为管道,但当它到达描述中带有引号的记录(在本例中为 ID 134,引号“表示英寸”)时出错。该错误建议将 BadDataFound 设置为 Null,但会忽略记录吗?
是否有我遗漏的允许此操作的配置?或者最好的方法是简单地用 {quote} 或其他东西替换引号,解析它然后在将其输入数据库之前替换回去?
只要没有字段包含管道符或换行符,NoEscape
模式就应该有效。
void Main()
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Mode = CsvMode.NoEscape,
Delimiter = "|"
};
using (var reader = new StringReader("ID|Price|Description|stock\n133|55.89|Standard Electric Drill|23\n134|3.40|3.5\" Drill Bit|56"))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<Foo>().Dump();
}
}
public class Foo
{
public int ID { get; set; }
public string Price { get; set; }
public string Description { get; set; }
public int stock { get; set; }
}