簡體   English   中英

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

[英]C# FileHelpers Nulls in Tab Delimited file

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

使用FieldNullValue屬性后,將忽略空值, FieldNullValue我將使用錯誤日志

在第4行的字段“歸檔名稱”之后找不到(記錄的字段較少,分隔符錯誤或下一個字段必須標記為可選)。

分隔符的類定義:

[DelimitedRecord("\t")]

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

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

在十六進制編輯器中查看導入的文件,我可以看到背靠背選項卡字符(09 09),我認為這是一個空字段。

十六進制視圖中的文件行

正如您在屏幕捕獲字段中看到的那樣,5和9為空。 這些會被filehelper解析器忽略。 有誰知道為什么?

我認為你有兩個問題在繼續。

首先,FileHelpers還需要一個標簽。 一個簡單的解決方法是使用[FieldOptional]屬性標記最后一個字段。

其次, FieldNullValue("NULL")表示:如果文件中字段的值為null ,則將其設置為字符串“NULL”。 文件中的值為"" ,而不是null 如果需要將空值轉換為其他值,可以使用自定義轉換器 ,如下所示:

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;

刪除屬性:

[FieldTrim(TrimMode.Both)]

似乎已經解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM