我正在使用FileHelpers解析制表符分隔文件。
使用FieldNullValue
属性后会忽略空值,我最终会得到错误日志
在第4行的字段“归档名称”之后找不到(记录的字段较少,分隔符错误或下一个字段必须标记为可选)。
分隔符的类定义:
[DelimitedRecord("\t")]
字段都是具有相同属性的字符串:
[FieldTrim(TrimMode.Both)]
[FieldNullValue("NULL")]
[FieldQuoted('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
public String initials;
在十六进制编辑器中查看导入的文件,我可以看到背靠背标签字符(09 09),我认为这是一个空字段。
正如您在屏幕截图字段中看到的那样5& 9为空。这些会被filehelper解析器忽略。有谁知道为什么?
答案 0 :(得分:2)
我认为你有两个问题在继续。
首先,FileHelpers还需要一个标签。一个简单的解决方法是使用[FieldOptional]
属性标记最后一个字段。
其次,FieldNullValue("NULL")
表示:如果文件中字段的值为null
,请将其设置为字符串“NULL”。您文件中的值为""
,而不是null
。如果您需要将空值转换为其他值,可以使用a custom converter,如下所示:
public class MyEmptyFieldConverter : ConverterBase
{
protected override bool CustomNullHandling
{
/// you need to tell the converter not
/// to handle empty values automatically
get { return true; }
}
public override object StringToField(string from)
{
if (String.IsNullOrWhiteSpace(from))
return "NULL";
return from;
}
}
然后将该属性添加到您的字段中。
[FieldConverter(typeof(MyEmptyFieldConverter))]
public string field9;
答案 1 :(得分:1)
删除属性:
[FieldTrim(TrimMode.Both)]
似乎已经解决了这个问题。