多行上的一条记录,仅首先使用RID

时间:2015-04-07 09:58:19

标签: java parsing bean-io fixed-length-file

我是使用BeanIO 2.1的新手,我又面临一个问题。

我正在尝试解码一个固定长度的文件,该文件有几条记录分布在几行上,其中' rid'仅在第一行标出

示例:

:10:BLABLABLABLA
:11:/TRTP/SEPA OVERBOEKING/IBAN
HR W HERMAN
503270327C30,49NTRFSCT20111212
:12:BLABLABLABLA

正如您所看到的,记录':11:'分布在3行。 我想把这些行作为一个字符串列表抓住,其中摆脱':11:'只会被忽略。

这是mapping.xml文件:

<record name="ownerInformation" order="2" class="com.batch.records.OwnerInformation" minOccurs="1" maxOccurs="6" collection="list">
    <field name="tag" type="string" length="4" rid="true" literal=":11:" ignore="true" />
    <field name="description" type="string" length="unbounded" maxLength="65" />
</record>

结果,异常UnexpectedRecordException:

  

org.beanio.UnexpectedRecordException:到达流的结尾,预期记录&#39; ownerInformation&#39;

再次感谢您的帮助

1 个答案:

答案 0 :(得分:0)

一种方法是绘制出您不需要的线条,因此它包含您希望从数据中获得的线条。下面是一个可以按原样处理不同记录类型的映射。这样可以为您提供正确的订单项。

请注意,每行都有一个“rid”,对于你的数据行,你基本上使用正则表达式来表示“任何不以冒号开头的东西”。在您的'while read()'代码中,您可以使用以下命令来解决逻辑:

if (reader.getRecordName().equals("record11"))

或进一步完成映射并添加组。

这是根据您的需要区分行的mapping.xml:

<beanio xmlns="http://www.beanio.org/2012/03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

<stream name="fabizFile" format="fixedlength">
    <record name="record10">
        <field name="recordType" rid="true" literal=":10:" />
        <field name="sometext" length="12" />
    </record>
    <record name="record11">
        <field name="recordType" rid="true" literal=":11:" />
        <field name="sometext" length="unbounded" maxLength="40" />
    </record>
    <record name="record12">
        <field name="recordType" rid="true" literal=":12:" />
        <field name="sometext" length="unbounded" maxLength="40" />
    </record>
    <record name="goodstuff" class="FabizModel">
        <field name="recordText" rid="true" regex="^(?!:).+" length="unbounded" maxLength="50" />
    </record>
</stream>
</beanio>