2017-06-07 23 views
0

私は優れたCsvHelperライブラリを使用しています。今度は、フィールドの先頭と末尾のスペースを明示的に追加する必要があります。私はこの使用してください:CsvHelperで1フィールドのみのトリミングを省略する方法

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

これは、限り、私は一般的に

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

as described in the CsvHelper docsを使用してトリミングすることを選択していないとして、作品を。しかし、どのように私は一般的にトリミング、特定のフィールドのためのexcpetを使用することができますか?私は現時点でバージョン2.5.0を使用しています。

1フィールドのみのトリミングを省略する方法はありますか?

編集:

私はちょうどConvertUsingを使用して、私のアプローチは完全に壊れていることが判明:CsvHelper ConvertUsing not changing outputは、私は後でこの質問を削除または更新するかつもり参照してください。

+1

マップした 'Bandwidth'プロパティでトリミングが行われていると言っていますか? –

+0

3.0のプレリリースをお試しください。私はそれがあなたがそこに期待するように動作すると思う。 –

+0

@JoshClose "帯域幅"フィールドを含む、 "true"に設定されていると、すべてのフィールドに発生します。 – Marcel

答えて

0

これは完全に間違っていて、ConvertUsingのマッピングは最初は機能しませんでした。これはオプションTrimFields = trueとは関係ありません。

私はそれが明示的なコンバータクラスで動作するようになった:

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

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

それから私は、このフィールドの先頭と末尾のスペースを追加し、このソリューションが動作するようになりまし

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

に自分のマッピングを変更し、トリムオプションにかかわらず。 しかし、このオプションを有効にしなくても、このフィールド出力に引用符が自動的に追加されます。しかし、Microsoft Excelは、見積もりなしでフィールドコンテンツを期待どおりに表示しますが、スペースは表示されます。

関連する問題