CSV Helpers 引用一切
CSV Helpers quoting everything
我只想引用 csvhelper 中的字符串,但是这是引用每个字段,包括 header 记录。我知道不希望 header 记录包含在引用中是他们跳过它的一种方式,也只引用字符串。
public static void writeCsvFile(List<SOPOrder> sopOrders, string filename)
{
using (var writer = new StreamWriter(filename))
using (var csv = new CsvWriter(writer))
{
csv.Configuration.TrimOptions=CsvHelper.Configuration.TrimOptions.Trim;
csv.Configuration.ShouldQuote = (field, context) => true;
csv.WriteRecords(sopOrders);
}
}
在 CsvHelper 中没有一个只引用字符串字段的好方法。你可以通过不引用任何字段然后使用自定义 StringConverter
来引用字符串字段来破解它。
using (var csv = new CsvWriter(Console.Out))
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "First, Record" },
new Foo { Id = 2, Name = "Second \"Record" },
new Foo { Id = 3, Name = "" },
new Foo { Id = 4 }
};
csv.Configuration.ShouldQuote = (field, context) => false;
csv.Configuration.TypeConverterCache.AddConverter<string>(new QuoteStringConverter());
csv.WriteRecords(records);
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
public class QuoteStringConverter : StringConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return "\"\"";
return "\"" + ((string)value).Replace("\"", "\"\"") + "\"";
}
}
我只想引用 csvhelper 中的字符串,但是这是引用每个字段,包括 header 记录。我知道不希望 header 记录包含在引用中是他们跳过它的一种方式,也只引用字符串。
public static void writeCsvFile(List<SOPOrder> sopOrders, string filename)
{
using (var writer = new StreamWriter(filename))
using (var csv = new CsvWriter(writer))
{
csv.Configuration.TrimOptions=CsvHelper.Configuration.TrimOptions.Trim;
csv.Configuration.ShouldQuote = (field, context) => true;
csv.WriteRecords(sopOrders);
}
}
在 CsvHelper 中没有一个只引用字符串字段的好方法。你可以通过不引用任何字段然后使用自定义 StringConverter
来引用字符串字段来破解它。
using (var csv = new CsvWriter(Console.Out))
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "First, Record" },
new Foo { Id = 2, Name = "Second \"Record" },
new Foo { Id = 3, Name = "" },
new Foo { Id = 4 }
};
csv.Configuration.ShouldQuote = (field, context) => false;
csv.Configuration.TypeConverterCache.AddConverter<string>(new QuoteStringConverter());
csv.WriteRecords(records);
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
public class QuoteStringConverter : StringConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return "\"\"";
return "\"" + ((string)value).Replace("\"", "\"\"") + "\"";
}
}