- Позволяет ли он проверять разные строки по разным определениям, т. е. одну для записи заголовка и одну для записей данных?
Да. Обычно вы читаете заголовок с помощью getHeader()
, который не использует CellProcessors, но ничто не мешает вам просто прочитать заголовок как обычную строку с помощью read()
с использованием CellProcessors. Каждый вызов read()
позволяет вам передавать CellProcessors, поэтому вы можете обрабатывать/проверять заголовок, строки данных и контрольную сумму по-разному, используя 3 разных массива CellProcessor.
- Позволяет ли вам проверить, что разделитель (в данном случае вертикальная черта '|') должен быть добавлен в конец строки?
Поскольку вы используете |
в качестве разделителя, последний столбец будет рассматриваться как пустой столбец (null
). Это означает, что ваш массив CellProcessor для чтения заголовка должен иметь 4 элемента (или 6 для строк данных), иначе вы получите исключение, говорящее о том, что количество столбцов не соответствует количеству процессоров ячеек. Поместив процессор new Equals(null)
в конец, вы можете фактически подтвердить, что строка заканчивается на |
.
- Есть ли или кто-нибудь написал CellProcessor, который проверяет шестнадцатеричные значения?
Вы можете использовать существующий обработчик ячеек new StrRegex("[0-9A-F]+")
для проверки с помощью регулярного выражения. Вы даже можете зарегистрировать удобочитаемое сообщение для ошибки проверки (например, «недопустимое шестнадцатеричное значение»), используя StrRegex.registerMessage().
Если вы хотите разобрать шестнадцатеричный код как число (вероятно, нет, но на всякий случай), то в Super CSV нет существующего ParseHex
CellProcessor. Если вы напишете один и отправите патч, я включу его в предстоящий релиз! В зависимости от того, насколько велико число, возможно, лучше обновить ParseLong иметь еще один конструктор, который принимает систему счисления (в данном случае 16)?
Я рекомендую не усложнять задачу и использовать CsvListReader (вы можете используйте другие считыватели, но вам нужно определить массив nameMapping для предоставления имен столбцов для строк заголовка, данных и контрольной суммы) следующим образом:
Прочитайте первую строку (я предполагаю, что второй столбец — это количество следующих строк данных?), используя массив «заголовок» CellProcessor.
Считайте строки данных n раз (где n задается вторым столбцом заголовка), используя массив данных CellProcessor.
Прочитайте контрольную сумму, используя массив CellProcessor 'checksum' (вероятно, только один ParseChecksum()
).
person
James Bassett
schedule
15.01.2013