QuoteMode
あいまいな引用符あなたの入力ファイルに含まれています。代わりに、[FieldQuoted]
属性を削除し、カスタムコンバータで引用符を処理できます。
[DelimitedRecord(",")]
public class LineModel
{
[FieldConverter(typeof(MyQuotedFieldConverter))]
public string Id;
[FieldConverter(typeof(MyQuotedFieldConverter))]
public string Details;
[FieldConverter(typeof(MyQuotedFieldConverter))]
public string Device;
}
public class MyQuotedFieldConverter : ConverterBase
{
public override object StringToField(string from)
{
// If the field starts and ends with a double quote
if (from.StartsWith("\"") && from.EndsWith("\""))
{
// Remove the first and last character
return from.Substring(1, from.Length - 1);
}
return from;
}
}
もちろん、フィールド内に「、」があると問題が発生します。
"1","7, Screen","Mobile"
は、その場合、あなたはINotifyRead
インターフェイスを実装することによって、入力をクリーンアップするために、レコードラインを事前に解析する必要があります。以下のような何か:
[DelimitedRecord(",")]
public class LineModel : INotifyRead
{
//... fields as before
public void BeforeRead(BeforeReadEventArgs e)
{
if (e.RecordLine.Count(x => x == ',') > 3)
{
e.RecordLine = DetectAndReplaceEmbeddedDelimiters(e.RecordLine);
}
}
public void AfterRead(AfterReadEventArgs e)
{
}
}
逆に考慮すべきもう一つのアプローチ:すべてのフィールドに引用符を追加したり削除/組み込み引用符を置き換えるために、カスタム・コンバータを使用します。次に、QuoteMode.AlwaysQuoted
を使用します。