FieldQuoted似乎无法正常工作

时间:2018-11-02 13:00:15

标签: vb.net filehelpers

我正在将FileHelpers 3.3与VB .net一起使用。我尝试寻找答案已有一段时间,但是我发现的所有信息都涉及到我没有遇到的行为。因此,我开始怀疑FileHelpers中的错误。

我有一个非常简单的CSV:

Description,Transaction Date,Transaction Time
01567,"Sep 1, 2018",12:47:32 AM PDT
01567,"Sep 1, 2018",12:47:32 AM PDT
81475,"Sep 1, 2018",12:52:18 AM PDT

所以我在VB中声明了一个包含这些数据的类:

<DelimitedRecord(","), IgnoreFirst(1)>
Public Class Sale
    Public Property description() As String
    <FieldQuoted(QuoteMode.AlwaysQuoted)>
    Public Property transactionDate() As String
    Public Property transactionTime() As String
End Class

当我使用以下命令读取文件时:

Dim engine As FileHelperEngine(Of Sale) = New FileHelperEngine(Of Sale)
Dim records = engine.ReadFile("D:\Projects\test.txt")

我收到以下错误: FileHelpers.BadUsageException:'行:2列:32.分隔符','在最后一个字段'_transactionTime'之后找到(文件错误或您需要向记录类添加字段)'

这是由第二个字段内的逗号引起的。如果我删除逗号,则一切正常。但是,即使我删除了逗号,transactionDate字符串仍然被引号引起来。

根据我在论坛上阅读的内容,FieldQuoted应该:

  • 正确处理引号中的逗号
  • 删除处理后的字符串中的引号

但是它不起作用。看起来FieldQuoted指令只是被忽略了。我可以尝试使用BeforeReadRecord事件来处理这些情况,但我认为FieldQuoted正是为了处理此用例而创建的。你能告诉我是否错过了明显的事情吗?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

FileHelpers要求字段不是VB中的属性。以下工作符合预期。

<DelimitedRecord(","), IgnoreFirst(1)>
Public Class Sale
    Public description As String
    <FieldQuoted(QuoteMode.AlwaysQuoted)>
    Public transactionDate As String
    Public transactionTime As String
End Class

最初,FileHelpers仅支持字段。在版本3中添加了对C#自动实现属性的支持,但是VB.NET中尚不支持属性。有很长一段时间的Github issue here