Разделитель Java, разделители, разрывы строк и возврат каретки - PullRequest
0 голосов
/ 13 июня 2018

Я использую Apache Camel для разделения потока файлов с помощью регулярных выражений.Мне нужно сохранить разделители, поэтому я использую следующее регулярное выражение:

(?=\r\n[0-9]{2}00) для разрывов строк в Windows с возвратом каретки.

Однако я хочу поддерживать разрывы строк в Windows и Linux, поэтомуЯ думал, что что-то вроде этого должно работать:

(?=\r?\n[0-9]{2}00) или даже (?=(\r\n|\n)[0-9]{2}00)

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

Я также протестировал другие варианты, например:

(?=.\n[0-9]{2}00) (?=^[0-9]{2}00) (я сохраняю разрыв строки в предыдущей группе)

но с любым из них я получаю пустой вывод либо в начале, либо в конце.

РЕДАКТИРОВАТЬ: Добавлен верблюжий маршрут

<route id="FileRoute" trace="false">
    <from uri="file:{{file.path}}?move=.done&amp;readLock=changed&amp;readLockCheckInterval=1500&amp;charset=UTF-8"/>

    <split streaming="true" stopOnException="true" shareUnitOfWork="true" parallelProcessing="true">
        <tokenize token="(?=\R[0-9]{2}00)" regex="true" />

        <setHeader headerName="CamelSplitIndex">
            <!-- line number basically -->
            <simple>${property.CamelSplitIndex}</simple>
        </setHeader>
        <setHeader headerName="CamelSplitComplete">
            <!-- did I read the last line? -->
            <simple>${property.CamelSplitComplete}</simple>
        </setHeader>

        <log message="Line: ${property.CamelSplitIndex}: BODY: ${body}"/>

        <choice>
            <when>
                <simple>${property.CamelSplitIndex} == 0</simple>
                <!-- skip first line as its a header -->
            </when>
            <otherwise>

                <setProperty propertyName="StringFound">
                    <simple>${body.substring(5,24).trim()}</simple>
                </setProperty>

                <setHeader headerName="ModifiedStringFound">
                    <simple>${property.StringFound}</simple>
                </setHeader>

                <process ref="ProcessName"/>

                <transform>
                    <simple>${body.replace(${property.StringFound}, ${header.ModifiedStringFound})}</simple>
                </transform>

                <removeHeader headerName="ModifiedStringFound"/>

            </otherwise>
        </choice>

        <aggregate strategyRef="AggregationStrategy" completionTimeout="15000">
            <correlationExpression>
                <simple>${in.header.CamelFileName}</simple>
            </correlationExpression>
            <completionTimeout>
                <header>timeout</header>
            </completionTimeout>
            <to uri="log:com.blah.blah.out"/>
        </aggregate>

    </split>

</route>

Ошибка:

org.apache.camel.language.bean.RuntimeBeanExpressionException: не удалось вызвать метод: .substring (5,24) .trim () для null из-за: org.apache.camel.language.bean.RuntimeBeanExpressionException: не удалось вызвать метод: substring (5,24) впусто из-за: java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 24

Пример файла:

78643756435694369    4754757864254578754578545457                                                                                                                0071
05007684546545465745     1740266981415800014580631000874120180521185558     000000000247986DFGBDFH FDGDGJHUHJK   SDFGSGDFGf      GT 541100898  00710047503051 0220180522
0501            000000  000000000000                                     046    00000103971056242218759000000000000 000000000000 000000                    00000000000  
0502            GH    001000000000000000000                                                                                                                             
05005212455451257521     1740266981415800001820031000874120180521183349     000000001817986FGHDFHFGJFGDHGDFDFH        FDGFDHGFDHDFH 541100898  00710043090051 0220180522
0501            000000  000000000000                                     046    00000100293449142130526000000000000 000000000000 000000                    00000000000  
0502            FD    001000000000000000000                                                                                                                             
05009789265762578888     1740266981415800012612361003716920180521173412     000000004859986DFHDGJFGJFGJKHGJGHJ   GDHFGHFGHFGH 541100898  00710029706451 0220180522
0501            000000  000000000000                                     046    00000103058175142271046000000000000 000000000000 000000                    00000000000  
0502            AR    001000000000000000000                                                                                                                             
05008758407825904958     1740266981415800004933011003716920180521173559     000000000798986FGHGFGHRTUJHGJDGHYHTJK    DHDGJFHJHFHJ    NJ 541100898  00710030461251 0220180522
0501            000000  000000000000                                     046    00000100902124678647109000000000000 000000000000 000000                    00000000000  
0502            TY    001000000000000000000                                                                                                                             
05004987785686893465     1740266981415800003253131003716920180521174415     000000001142986FDGFDGHFGJTYUJDFHGDEHGTGFH     DFHDYRT     BG 541100898  00710032033851 0220180522
0501            000000  000000000000                                     046    00000100620274678526079000000000000 000000000000 000000                    00000000000  
0502            UI    001000000000000000000                                                                                                                             

Есть идеи, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...