Opencsv CsvMalformedLineException регистрирует всю ошибочную строку – могу ли я это предотвратить?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Opencsv CsvMalformedLineException регистрирует всю ошибочную строку – могу ли я это предотвратить?

Сообщение Anonymous »

Используя Opencsv (5.11), иногда мы получаем входные файлы с большим количеством строк (до 80 тыс. строк). Если при анализе одного из этих файлов возникает исключение CsvMalformedLineException (проблема «Незавершенное поле в кавычках в конце строки CSV»), исключение оборачивается RuntimeException с всю строкой, вызывающей нарушение, включенной в сообщение об исключении. При типичном протоколировании исключений это может привести к массивным сообщениям журнала.
Проблема такого рода ошибок в действительно большом файле заключается в том, что несовпадающий символ "" заставляет синтаксический анализатор думать, что весь остаток файла является частью одной и той же строки, поэтому все это содержимое попадает в сообщение об исключении (см. пример ниже).
Что-то интересное заключается в том, что базовый код исключения Сообщение CsvMalformedLineException включает только начало текста оскорбительной строки, что на самом деле более желательно.
Есть ли простой способ предотвратить включение RuntimeException всей строки в свое сообщение?

Пример
Представьте себе такой CSV-файл (небольшой размер для читаемость):

Код: Выделить всё

col1, col2, col3, col4
Column 1-1 data,Column 1-2 data,Column 1-3 data,Column 1-4 data
Column 2-1 data,Column 2-2" data,Column 2-3 data,Column 2-4 data
Column 3-1 data,Column 3-2 data,Column 3-3 data,Column 3-4 data
Column 4-1 data,Column 4-2 data,Column 4-3 data,Column 4-4 data
Незавершенный " в столбце 2–2 приводит к тому, что исключение сообщает, что строка-нарушитель

Код: Выделить всё

Column 2-1 data,Column 2-2" data,Column 2-3 data,Column 2-4 data
Column 3-1 data,Column 3-2 data,Column 3-3 data,Column 3-4 data
Column 4-1 data,Column 4-2 data,Column 4-3 data,Column 4-4 data
Представьте файл с десятками тысяч строк после непревзойденного " — сообщения журнала становятся настолько огромными, что их невозможно использовать.

Просматривая исходный код, я обнаружил, что класс LineExecutor — это то место, где CsvMalformedLineException обертывается, а для формулирования этого сообщения используется встроенный пакет ресурсов библиотеки, используя метод Контекст CsvMalformedLineException (который является оскорбительной «строкой»). Переопределить это не кажется тривиальным или даже возможным.
Я также рассматривал возможность перехвата RuntimeException, переобертывая вложенное исключение более коротким сообщением, но это кажется более чем хакерским, я ищу другой способ, более естественный для Opencsv.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -i-prevent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»