C#FileHelpers在制表符分隔文件中为空

时间:2014-08-28 12:20:00

标签: c# filehelpers

我正在使用FileHelpers解析制表符分隔文件。

使用FieldNullValue属性后会忽略空值,我最终会得到错误日志

  在第4行的字段“归档名称”之后找不到

(记录的字段较少,分隔符错误或下一个字段必须标记为可选)。

分隔符的类定义:

[DelimitedRecord("\t")]

字段都是具有相同属性的字符串:

 [FieldTrim(TrimMode.Both)]
 [FieldNullValue("NULL")]
 [FieldQuoted('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
 public String initials;

在十六进制编辑器中查看导入的文件,我可以看到背靠背标签字符(09 09),我认为这是一个空字段。

file line in hex view

正如您在屏幕截图字段中看到的那样5& 9为空。这些会被filehelper解析器忽略。有谁知道为什么?

2 个答案:

答案 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)]

似乎已经解决了这个问题。