Как прочитать сложный текстовый файл, используя весенний пакет, имеющий несколько форматов

У меня есть текстовый файл, который имеет несколько форматов..... как мне его прочитать с помощью весеннего пакетного чтения?

Пример: файл

DATE: 09/12/2018.           SERIAL NO: 12345
BANK: HDFC                  IFSC NO: 9876


                    NAME           NO. OF FD.          AMOUNT
                    ABC.                   5            100                  
                    XYZ.                   7            200
                    DEF.                   7            200
                    JKL.                  10            300
TOTAL.                                    29            800

REJECTED REQUEST:                  1 
BRANCH NAME:                  Atlanta 

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

примечание*** значения будут иметь фиксированную длину/диапазон

Объект, который я надеюсь сделать для полного отчета:

 private String date;        
 private String Serial; 
 private String bank;        
 private String ifsc;
 private List<RowData> rows;
 private string totalFD;
 private String totalAmount;
 private String rejectedRequest;
 private String branchName

Объект данных строки (строки или запись, которые будут переменными), упомянутые выше, будут такими, как показано ниже:

 private String name;        
 private String noOfFD; 
 private String amount;

person Tushar    schedule 10.12.2018    source источник
comment
Какой тип элемента в вашем случае? Вы сказали: значения будут фиксированной длины/диапазона. Вы пытались использовать FixedLengthTokenizer?   -  person Mahmoud Ben Hassine    schedule 10.12.2018
comment
PatternMatchingCompositeLineMapper‹Product› mapper = new PatternMatchingCompositeLineMapper‹›(); Токенизаторы Map‹String, LineTokenizer› = new HashMap‹String, LineTokenizer›(); tokenizers.put(ДАТА*, mobilePhoneProductLineTokenizer()); tokenizers.put(ИМЯ*, bookProductLineTokenizer()); mapper.setTokenizers (токенизаторы); Map‹String, FieldSetMapper‹Product›› mappers = new HashMap‹String, FieldSetMapper‹Product››(); mappers.put(ДАТА*, mobilePhoneProductFieldSetMapper()); mappers.put(ИМЯ*, bookProductFieldSetMapper()); mapper.setFieldSetMappers (сопоставители);   -  person Tushar    schedule 10.12.2018
comment
Я использовал что-то вроде выше... Множественный токенизатор и несколько FieldsetMapper....... то, что делает FieldSetMapper, это.... его создание другого объекта для каждого поля setMapper..... Я хочу, чтобы все значения были токенизированы для помещаться в один объект для каждого файла...... Как этого добиться?????   -  person Tushar    schedule 10.12.2018
comment
@MahmoudBenHassine Не могли бы вы помочь с этим????? Пожалуйста, дайте мне знать, если требуется дополнительное объяснение?   -  person Tushar    schedule 11.12.2018
comment
Пожалуйста, не добавляйте код в комментарии, вы всегда можете отредактировать вопрос и добавить туда код. I want all the value tokenized to be put into a single object for each file Я не понимаю, как это возможно. С PatternMatchingCompositeLineMapper у вас будет другой тип объекта для каждой строки (не файла) в соответствии с шаблоном соответствия этой строки. Вы можете найти пример здесь: github.com/spring-projects/spring-batch/blob/master/   -  person Mahmoud Ben Hassine    schedule 11.12.2018
comment
@MahmoudBenHassine Я отредактировал вопрос выше. Пожалуйста, смотрите объяснение..... Я надеюсь, что мой мотив теперь вам ясен. В основном только 1 объект для полного отчета   -  person Tushar    schedule 11.12.2018


Ответы (1)


Строки или запись, которые будут переменными

Поскольку количество записей данных является переменным, вы можете использовать SingleItemPeekableItemReader, чтобы просмотреть элемент вперед и посмотреть, относится ли он к типу RowData или к типу верхнего/нижнего колонтитула.

Здесь вы можете найти два примера, похожих на ваш вариант использования:

person Mahmoud Ben Hassine    schedule 11.12.2018