Верблюд: работа с динамическими столбцами в CSV-файле с помощью BindyCSVFormat
Я довольно новичок в Apache Camel.
Я писал маршруты, которые обрабатывают файл CSV, используя BindyCsvformat
учебный класс. Пока что файлы CSV, которые я обрабатываю, довольно просты, в том смысле, что они имеют фиксированное количество записей. Таким образом, используя @DataField
аннотация для определения позиций столбцов не является проблемой.
Однако я наткнулся на файл CSV, в котором число столбцов является динамическим. Этот файл CSV содержит только 1 строку.
Номера столбцов являются динамическими в зависимости от значения столбца, называемого "число периодов".
Если значение в столбце "число периодов" равно "5", то в файл добавляется 5 дополнительных столбцов.
Вот пример заголовков в этом конкретном файле CSV:
Образец-csv.txt
row_id, number_of_periods, result_period, result_period, result_period
0,3,0.00,10.00,10.00.
Как видно из приведенных выше примеров данных, поскольку в столбце "number_of_periods" отображается "3", существует три столбца "result_period". Если бы поле 'number_of_periods' было 5, тогда было бы 5 столбцов 'result_period'.
Может ли кто-нибудь помочь (или указать мне на любые ссылки), где BindyCsvFormat
(через Camel) может обрабатывать это динамическое сопоставление столбцов? Если я не ошибаюсь, я думаю, @DataField
аннотацию можно применять только к фиксированным полям (при условии, что общее количество столбцов известно заранее).
Заранее спасибо.
1 ответ
Да, для фиксированных полей, однако есть опция, позволяющая последнему переполнению поля и просто захватить остаток строки.
В вашем случае лучше не использовать Bindy, а просто написать собственный кусочек кода синтаксического анализатора CSV. Это не будет трудно сделать это самостоятельно. Затем вы все равно можете использовать свой анализатор CSV в Apache Camel и выполнять преобразование сообщений для каждой строки с помощью вашего анализатора. Парсер может быть просто реализован как метод Java.