Helpers - компьютеры, интернет, программирование

Прочитайте содержимое файла, которое начинается с #, используя Spring Batch

У меня есть очень простое приложение Spring Batch, которое читает несколько файлов и записывает их в один файл. Мой проект работает очень хорошо во всех сценариях, кроме случаев, когда строка начинается с «#» в моем файле. Мой читатель не читает эту строчку. Проблема в том, что верхняя система будет отправлять вниз файлы, где каждая строка начинается с # :(

Кто-нибудь сталкивался с подобной проблемой и как ее решить.

Заранее спасибо..

Мой токенизаторconfig

<bean id="accountDataTokenizer" class="org.springframework.batch.item.file.transform.PatternMatchingCompositeLineTokenizer">
    <property name="tokenizers">
        <map>
            <entry key="#ACCOUNT*" value-ref="headerRecordTokenizer" />
            <entry key="*" value-ref="defaultLineTokenizer" />
        </map>
    </property>
</bean>


  • Не могли бы вы опубликовать текущую конфигурацию Spring Batch? И что вы хотите сделать с такими строками? Игнорируй их? 13.04.2016
  • Входной файл создается из какой-то другой системы. Эта система генерирует этот файл таким образом, что каждая строка начинается с #. Теперь, когда я читаю эти файлы, я не получаю никакого содержимого в своем ридере, но если я удалю # из каждой строки, все будет работать нормально. 14.04.2016

Ответы:


1

FlatFileItemReader предоставляет возможность установить строку, которая идентифицирует закомментированные строки. Это делается через конфигурацию FlatFileItemReader#setComments(String[] prefixes). Итак, в вашем случае вы должны настроить свой FlatFileItemReader следующим образом:

@Bean
public FlatFileItemReader reader() {
    FlatFileItemReader reader = new FlatFileItemReader();
    ...
    reader.setComments(new String[] {"#"});
    return reader;
}

Подробнее о FlatFileItemReader и этом методе можно прочитать в документации здесь: https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/FlatFileItemReader.html

15.04.2016
  • Спасибо, Майкл Минелла. Я получил то, что вы хотите сказать, и реализовал то же самое. Я использовал конфигурацию, чтобы переопределить предопределенное значение комментария, из-за которого читатель распознавал все мои строки как комментарий. 19.04.2016
  • Я могу получить данные с помощью #, но не могу правильно токенизировать. Мой входной файл выглядит так: #Account:12345,234,12, когда я использую токенизатор, он не токенизирует строку с именами и дает данные в формате массива токенов. Я обновил рассматриваемую конфигурацию токенизатора. 21.04.2016
  • Я понял причину проблемы с токенизатором. Я использую токенизатор по умолчанию, для которого ключ * и когда мы сортируем, ключ * появляется в самом верху, и, следовательно, все строки были токенизированы токенизатором по умолчанию. Я удалил токенизатор по умолчанию, и теперь он работает. 21.04.2016

  • 2

    Если первая строка всегда "#", вы можете пропустить чтение первой строки файла, добавив это свойство в itemReader (FlatFileItemReader):

    14.04.2016
  • Это не только первая строка, для каждой строки первым символом является # 14.04.2016
  • В Spring-Batch Job обычно есть 3 класса: Reader, Processor и Writer. В классе, который реализует ItemProcessor, у вас есть метод, называемый процессом, который получает java-бин прочитанной строки в качестве входных данных. Вы можете удалить символ в этом методе или (по-другому) вы можете изменить java-бин, который представляет структуру файла, вы можете изменить метод getXXX (где XXX — имя вашего поля) и удалить специальный символ перед возвратом значения . Я надеюсь, что эти предложения могут быть полезны для вас. 15.04.2016
  • : Спасибо за ваше предложение. Я понял, что вы здесь предлагаете, но я не получаю содержимое в самом своем читателе (я написал собственный читатель), поэтому я никак не могу сопоставить его с каким-либо POJO, поскольку у меня нет дескриптора элемента. Таким образом, на самой первой итерации считыватель возвращает значение null, что указывает на то, что чтение выполнено, но мой считыватель еще не вернул никакого содержимого, поэтому у меня нет этого дескриптора в моем процессоре. 15.04.2016
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..