FieldQuoted не работает должным образом - PullRequest
0 голосов
/ 02 ноября 2018

Я использую 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 '(файл неправильный или вам нужно добавить поле в класс записи)'

Это вызвано запятой внутри второго поля. Если я удалю запятую, все работает нормально. Но даже если я удалю запятую, строка транзакции все равно будет заключена в кавычки.

Из того, что я прочитал на форумах, FieldQuoted должно:

  • правильно обрабатывать запятую в указанном поле
  • удалить кавычки в обработанной строке

Но это не работает. Похоже, что инструкция FieldQuoted просто игнорируется. Я мог бы попытаться обработать эти случаи с помощью события BeforeReadRecord, но я думал, что FieldQuoted был создан именно для обработки этого варианта использования. Подскажите, пожалуйста, пропустил ли я что-то очевидное?

Большое спасибо!

1 Ответ

0 голосов
/ 02 ноября 2018

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 поддерживал только поля. Поддержка автоматически реализованных свойств C # была добавлена ​​в версии 3, но пока нет поддержки свойств в VB.NET. Здесь существует давняя проблема Github .

...