如何使用CsvHelper仅对一个字段省略修剪

neskvpey  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(164)

我使用的是优秀的CsvHelper库。现在我需要显式地在字段中添加一些前导空格和尾随空格。我使用以下命令来完成此操作:

private const string Space = " ";
//....
Map(x => x.Bandwidth).Index(++indexCounter).ConvertUsing(item => Space + item + Space).Name("Bandwidth");

这个方法很有效,只要我不选择一般的修剪使用

// Default value
csv.Configuration.TrimFields = true;

正如在CsvHelper文档中所描述的那样。但是我如何一般地使用修剪,除了特定的字段?我目前使用的是2. 5. 0版本。

    • 是否有办法仅对一个字段省略修剪?**

编辑:
我刚刚发现我使用ConvertUsing的方法是完全错误的:请参阅CsvHelper ConvertUsing not changing output我稍后将删除或更新此问题。

slhcrj9b

slhcrj9b1#

我完全搞错了,与ConvertUsing的Map一开始就不起作用,与选项TrimFields = true无关。
我让它使用一个显式的转换器类:

public class CsvExportStringSpacingConverter : DefaultTypeConverter {
    private const string Space = " ";

    public override string ConvertToString(TypeConverterOptions options, object value) {
        return Space + value + Space;
    }
}

然后我将Map更改为

Map(x => x.Bandwidth)
    .Index(++indexCounter)
    .TypeConverter<CsvExportStringSpacingConverter>)
    .Name(CsvExportColumnName.Bandwidth);

**此解决方案现在可以工作,为该字段添加前导空格和尾随空格,而不考虑修剪选项。**奇怪的是,即使未启用此选项,它也会自动为该字段输出添加引号。不过,Microsoft Excel显示的字段内容与预期一致,没有引号,但带有空格。

dddzy1tm

dddzy1tm2#

试试这个,它适合我在V28.1上使用

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
                {
                    ShouldQuote = (field) => false,
                };
config.TrimOptions = TrimOptions.Trim;
using (StreamWriter _streamWriter = new StreamWriter(fileNamePath))
                {
                    using (var _csvWriter = new CsvWriter(_streamWriter, config))
                    {
                        await _csvWriter.WriteRecordsAsync(models);
                    }
                }

相关问题